質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

解決済

2回答

989閲覧

JTextAreaに入っている文字列で、キャレットより下の範囲で文字列を検索する方法

hood

総合スコア351

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

0クリップ

投稿2018/12/28 01:14

###JTextAreaで、キャレットより下の文字列を検索する方法
少し複雑なことをお聞きしますので、わかりにくいところがあるかと思いますが、どうか多めに見てください。

題目通り、私は「JTextAreaに入っている文字列で、キャレットより下の範囲で文字列を検索する方法」を探しています。

例えば、下に記すような文字列がJTextAreaに入っているとします。ここでは1行目の終わりにキャレットがあるとします。

plainText

1<string name="message0">肉を食べない君が死んだ。</string>|←ここにキャレットがある 2<string name="message1">君は今日の朝、屋上から飛び降りた。</string>   3<string name="message2">それは突然の出来事ではない。</string> 4<string name="message3">君は朽ちてく花と同じように、ゆっくりと灰色に枯れ,そして散った。</string>

このときキャレット以下にある、<string name=という文字列、ここでは二行目の<string name=を探しだすのにはどうしたらよいのでしょうか?

というもの、下に示すコードのように普通にtextAreaに入っている文字列に対してindexOfとやって、も一行目の<string name=という文字列が検索されてしまいます。そうではなく私は「キャレットの下で初めに出てくる、<string name=」を探しだしたいのです。

java

1//ダメコード 2String str1 = textArea.getText(); 3String str2 = "<string name="; 4int result = str1.indexOf(str2); 5if (result != -1) { 6 System.out.println(result); 7} else { 8 System.out.println(str2 + "は見つかりませんでした"); 9}

ネットで調べでも、それらしいメソッドはありませんでした。おそらく自分でアルゴリズムを考えないといけないのだと思いますが、「山を登る」のにどのルートを辿っていけばいいのか、皆目見当がつかない状態です。

どうかご助言をお願いします・・・!!!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Java

1String str1 = textArea.getText(); 2String str2 = "<string name="; 3int result = str1.indexOf(str2, textArea.getCaretPosition()); 4if (result != -1) { 5 System.out.println(result); 6} else { 7 System.out.println(str2 + "は見つかりませんでした"); 8}

投稿2018/12/28 02:29

編集2018/12/28 02:40
root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/12/28 23:03

実家への帰省で返信が遅くなってしまいました。回答ありがとうございます!他の回答者さまとも同じような、回答をいただいたので、早く回答いただいたかたにベストアンサーをあげたいと思いますが・・・・でも、ありがとうございました!!
guest

0

ベストアンサー

indexOfには下記の引数を指定するメソッドがあります。

String#indexOf(String str, int fromIndex)

第2引数に開始位置を指定すればそこから検索を始めてくれます。

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#indexOf-java.lang.String-int-

開始位置はJTextAreaからキャレットの位置を取り出せばできるかと思います。

投稿2018/12/28 02:21

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/12/28 23:01

実家への帰省で返信が遅くなってしまいました。回答ありがとうございます!そんな引数があったんですね・・・・早速試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問