• ベストアンサー
  • 困ってます

読み込んだテキストの改行表示

  • 質問No.5526599
  • 閲覧数467
  • ありがとう数2
  • 回答数4

お礼率 46% (30/65)

javaを用いて、プログラミングしているのですが
読み込んだテキストの改行表示の仕方で困っています。

プログラムは、日本語か英語で単語を入力(例:一、one)すると
読み込むwords.txtから対応するスペイン語(例:一 * one * UNO ⇒UNO)を
textareaに表示するというものです。

このとき、読み込んだwords.txtは現在は

一 * one * UNO
二 * two * DOS


となっているのですが、このスペイン語の部分に日本語の注釈をつけ
数行に渡ってtextareaに表示したいと思っています。
説明が拙く少し分かりづらいですが、画像などを参照してくださると助かります。

具体的には、今はスペイン語のtextareaに
 UNO
とだけ表示されているものを
 UNO
 [数]一つの
といったように表示するにはどうすれば良いでしょう?

一応、該当部分のソースコードも載せておきます。
質問の仕方も悪いですが、どうかよろしくお願いします。



public void actionPerformed(ActionEvent e){
try{
if(e.getSource() == Honyaku){
BufferedReader wordsfile = new BufferedReader(new FileReader("Z:/09sotsuron/words.txt"));
while ((wrs=wordsfile.readLine())!= null){
StringTokenizer st = new StringTokenizer(wrs," * ");
nichi ="" + st.nextToken();
ei ="" + st.nextToken();
supe = "" + st.nextToken();
if ((jap.getText()).equals(nichi)){
eng.setText(ei);
spa.setText(supe);
} else if ((eng.getText()).equals(ei)){
jap.setText(nichi);
spa.setText(supe);
}
}
wordsfile.close();
} else if(e.getSource() == Clear){
nichi = "";
ei ="";
supe = "";
jap.setText(nichi);
eng.setText(ei);
spa.setText(supe);
}
}
catch(IOException ie){
System.exit(1);
}
}

質問者が選んだベストアンサー

  • 回答No.4
  • ベストアンサー

ベストアンサー率 55% (22/40)

あいや、setTextメソッドが
innerHTMLを使っているのか、innerTextを使っているのかが知りたかったのです。
(両方使ってないかもしれない)

方向が変わってしまって申し訳ないのですが、
辞書内の文字列が
"文字列" + "\r\n" + "文字列"
だとjava内でエスケープ文字が解決されてしまうので

"文字列" + "\\r\\n" + "文字列"
とし、"\"自体をエスケープしないとHTMLで"\"が書けないような気がしますね。
補足コメント
RaiDeen

お礼率 46% (30/65)

"文字列1" + "\\r\\n" + "文字列2"
で実行すると "文字列1" 、

文字列1 + "\\r\\n" + 文字列2
で実行すると 文字列1 と表示されました。

解決できませんでしたが、とりあえず保留して他の部分に移ろうと思います。
色々有難うございました。
投稿日時:2009/12/30 22:33

その他の回答 (全3件)

  • 回答No.3

ベストアンサー率 55% (22/40)

#1,2です。

全容がわからないのでなんともいえませんが
>>eng.setText(ei);
>>spa.setText(supe);
このsetText()メソッドは自作のものですか?

実際にHTMLに文字列を描画するときに"innerHTML"を使用していませんか?

innerHTMLでは、エスケープ文字や数字、実態参照文字を入力しても、
そのまままの"文字列"、または半角空白?が描画されるようです
解決後の文字を描画したいときはinnerTextを使用してください。

innerTextに
"あああ\r\nいいい"と突っ込んだらうまくいきました。
補足コメント
RaiDeen

お礼率 46% (30/65)

あまり長たらしくなってもいけないと思い該当部分のみコードを記載しましたが、全容は以下の通りです。

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;

public class reference extends Applet implements ActionListener{
Button Honyaku, Clear;
TextField jap, eng;
TextArea spa;
String wrs;
String nichi, ei, supe;

public void init(){
setBackground(new Color(200, 200, 200));
add(new Label("[ japanese ]"));
jap = new TextField("", 30);
add(jap);
add(new Label("[ english ]"));
eng = new TextField("", 30);
add(eng);
Honyaku = new Button("スペイン語に翻訳");
Honyaku.addActionListener(this);
add(Honyaku);
Clear = new Button("ウィンドウ内を消去");
Clear.addActionListener(this);
add(Clear);
add(new Label("[ spanish ]"));
spa = new TextArea("", 5, 30);
add(spa);
}

public void actionPerformed(ActionEvent e){
try{
if(e.getSource() == Honyaku){
BufferedReader wordsfile = new BufferedReader(new FileReader("Z:/09sotsuron/words.txt"));
while ((wrs=wordsfile.readLine())!= null){
StringTokenizer st = new StringTokenizer(wrs," * ");
nichi ="" + st.nextToken();
ei ="" + st.nextToken();
supe = "" + st.nextToken();
if ((jap.getText()).equals(nichi)){
eng.setText(ei);
spa.setText(supe);
} else if ((eng.getText()).equals(ei)){
jap.setText(nichi);
spa.setText(supe);
}
}
wordsfile.close();
} else if(e.getSource() == Clear){
nichi = "";
ei ="";
supe = "";
jap.setText(nichi);
eng.setText(ei);
spa.setText(supe);
}
}
catch(IOException ie){
System.exit(1);
}
}

}

で、単語ファイルのほうが

一 * one * uno
二 * two * dos


となっています。

で、コンパイルしてできたreference.classをHTML中で
 <applet code="reference.class" width="280" height="350"></applet>
で読み込んで実行しています。
投稿日時:2009/12/17 09:56
  • 回答No.2

ベストアンサー率 55% (22/40)

>> 一 * one * UNO\r\n[数]一つの
>> 二 * two * DOS\r\n[数]二つの
注釈も同辞書内にあるのですね

>>注釈とする別のtxt辞書を作ればよいのでしょうか?アノテーション>>というのは使ったことがなくよくわかりませんが…
getAnnotationというのは適当に書いただけです、すみません。
私もよくわかりません。
文字列に対応する文字列を引っ張ってくる、というメソッドがあるなら
それを利用して指定したスペイン語文字列から対応する注釈文字列
をもってくるのかな?
と思っただけです。そうすれば、スペイン語と注釈文字列もばらばらに使えてなんとなく気持ちがいいですし。

>>ちなみにプログラムはHTMLに表示しています。 
HTMLに表示しているのならば\nを連結するだけでいいんじゃないかなぁ
と思いましたが、
javascriptを使用して、<textarea></textare>のinnerHTMLに
"文字列" + "\n" + "文字列"
を突っ込んだところ、FireFox、Google chromeでは正常に改行されましたが、
IE7では改行されませんでした

うーん。
IEのバージョンはなんでしょうか?
補足コメント
RaiDeen

お礼率 46% (30/65)

innerHTMLというのも少し調べてみます。
IEのバージョンは7です。
投稿日時:2009/12/17 10:01
  • 回答No.1

ベストアンサー率 55% (22/40)

ちょっとよくわからないんですが
英語とスペイン語が対応しているtxt辞書から引っ張り出して
該当するスペイン語を表示させているのですよね?
注釈となる文字列を引き出すのに、スペイン語と注釈とが対応しているtxt辞書があるのかどうかわかりませんが

String antatSpa = "";
antatSpa = spa.getAnnotation(supe);
supe = supe + "\n" + antatSpa;
spa.setText(supe);

とかでできるんじゃないでしょうか。

これはHTMLに表示しているのですか?
HTMLに表示する文字列を生成するのならば
supe = supe + "<br />" + antatSpa;
でどうでしょう。
補足コメント
RaiDeen

お礼率 46% (30/65)

ちょっと説明が悪かったです、すみません

現状は、txtファイルは
 一 * one * UNO
 二 * two * DOS
となってまして、これを
 一 * one * UNO\r\n[数]一つの
 二 * two * DOS\r\n[数]二つの
といったように同じtxt辞書内にある注釈を改行して表示できないか、という質問です。上記の\r\nではできませんでした

注釈とする別のtxt辞書を作ればよいのでしょうか?アノテーションというのは使ったことがなくよくわかりませんが…

ちなみにプログラムはHTMLに表示しています。 
投稿日時:2009/12/16 14:36
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ