Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

テキストエリアの改行

おはよう\nこんにちわ\nこんばんわ

これをプログラム内で書いたら改行になりますが、プログラムがテキストファイルを読み込んで一旦StringにいれてJTextAreaに表示させると\nもそのまま表示になる。どうしたらいいですか?

9

回答

6288

閲覧

9件の回答

評価

0

自前でエスケープしましょう。

評価

0

できない。(実際には関数なのでsは引数で渡される)
            String s, str[];
            int counter;
            
            
            str = s.split("\n");
            counter = 0;
            
            textarea.setText("");
            try
            {
                while(true)
                {
                    textarea.append(str[counter]);
                    textarea.append("\n");
                    counter++;
                }
            }
            catch(Exception e)
            {
                
            }

評価

0

ちなみに\nのかわりにbrを使えばできるが、brotherならotherになってしまうのでなんとか\nで!

評価

0

例外でループを抜ける方法はほとんどの場合やめたほうがいいでしょう。
ローカル変数の位置は、意見が割れるようですが、私は宣言と同時に初期化も行うべきだと考えています。
コーディングスタイルはJavaでは

while (true) {
    ...
}

のほうが標準的です。

本題ですが、読み込むテキストファイルの内容はどのようなものですか?
sに一行毎に入ってくるのでうまくいかないような気がします。

評価

0

// sにファイルの内容が入ってくると仮定
// versionは5.0以降を仮定
void setText(String contents) {
    textarea.setText("");
    for (String str : contents.split("\n")) {
        textarea.append(str);
        textarea.append("\n");
    }
}

・・・かなり間抜けですね。
void setText(String contents) {
    textarea.setText(contents);
}
・・・さらに間抜けな気が。
まさか、読み込むファイルって

line1\nline2\nline3\n...

とか、そんな感じですか?

評価

0

これはなぜですか?
>例外でループを抜ける方法はほとんどの場合やめたほうがいいでしょう。

まあ、そんな感じです。
まさか、読み込むファイルって

line1\nline2\nline3\n...

とか、そんな感じですか?

評価

0

例外機構というのは正常フローの制御用の構文ではないため、処理が重く、また、読みにくくなるためです。

>まあ、そんな感じです。
失礼、最初に書いてありましたね。
これまたversion5.0以降を対象にしたコードですが、

void setText(String contents) {
    textarea.setText("");
    for (String str : contents.split(java.util.regex.Pattern.quote("\\n"))) {
        textarea.append(str);
        textarea.append("\n");
    }
}

でOKでしょう。
また、5.0より前のversionをお使いの場合、

String[] line = contents.split("\\\\n");
for (int i = 0; i < line.length; i++) {
    ...
}

のような感じでどうでしょう?

評価

0


内田
内田幸
内田幸宏

評価

0

String str = replaceAll("\\r\\n", " ");

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。