<AI>
JavaFXの TextArea では、カーソル(キャレット)位置の文字列を抽出し、
その情報から任意の行番号を計算してジャンプ(移動)させます。
主な手順は、現在の文字列全体を改行文字で配列化して特定行を割り出し、
positionCaret() や selectRange() でカーソルを移動することです。

実装手順とサンプルコード
以下に、対象となる行の情報(例えば "行番号: 15" のような文字列)を取得し、
editorの指定行へジャンプする処理の具体的な実装例を示します。
java
import javafx.fxml.FXML;
import javafx.scene.control.TextArea;

public class EditorController {

    @FXML
    private TextArea textArea; // 検索元(ログや指定情報が書かれている領域)
    @FXML
    private TextArea editor;   // ジャンプ先のテキストエディタ

    @FXML
    private void jumpToLine() {
        // 1. TextAreaの現在のカーソル位置を取得
        int caretPosition = textArea.getCaretPosition();

        // 2. カーソル位置までの全テキストを取得し、改行コードで分割
        String text = textArea.getText();
        String textBeforeCaret = text.substring(0, caretPosition);
        String[] lines = text.split("\n");

        // 3. カーソルがある行のテキストを割り出す
        int currentLineIndex = textBeforeCaret.split("\n").length - 1;
        if (currentLineIndex < 0 || currentLineIndex >= lines.length) return;
        
        String lineText = lines[currentLineIndex];

        // 4. 行のテキストからジャンプ先情報を抽出 (例: "[Jump: 50]" のような記述を想定)
        int targetLineNumber = parseLineNumber(lineText);

        // 5. editor側の行数を計算しジャンプ(※0始まりでインデックス計算)
        if (targetLineNumber > 0) {
            String[] editorLines = editor.getText().split("\n");
            int targetIndex = Math.min(targetLineNumber - 1, editorLines.length - 1);
            
            if (targetIndex >= 0) {
                // 移動先インデックスまでの文字数を計算してキャレットを移動
                int jumpPosition = calculateCharacterOffset(editorLines, targetIndex);
                editor.positionCaret(jumpPosition);
                editor.requestFocus();
            }
        }
    }

    // 文字列から行番号を抽出する簡易パーサー
    private int parseLineNumber(String lineText) {
        try {
            // 例: "Line 12" のように記述されている場合の抽出
            if (lineText.contains("Line ")) {
                String numStr = lineText.replaceAll("[^0-9]", "");
                return Integer.parseInt(numStr);
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return -1;
    }

    // 指定したインデックス(行)の開始位置の文字数を計算
    private int calculateCharacterOffset(String[] lines, int targetIndex) {
        int offset = 0;
        for (int i = 0; i < targetIndex; i++) {
            offset += lines[i].length() + 1; // +1 は改行文字分
        }
        return offset;
    }
}

処理のポイント

行の特定: 現在の選択位置から substring で切り出し、改行文字(\n)の数を数えることでカーソル行のインデックスを特定します。

文字列の解析: parseLineNumber メソッドで、「該当行に書かれた情報」から正規表現などを用いて移動先の行番号を数値化します。

エディタへの反映: editor.positionCaret() メソッドを使用して、算出した文字オフセットの位置にエディタのカーソルを移動させます。