Swing/GetLineText のバックアップの現在との差分(No.2)
TITLE:JTextAreaから一行ずつ文字列を取得
JTextAreaから一行ずつ文字列を取得して
編集者:Terai Atsuhiro~
作成日:2006-10-09
更新日:2023-07-07 (金) 13:58:07
概要
JTextArea
などのテキストコンポーネントから一行ずつ文字列を取り出してそれを処理します。
Screenshot
Advertisement
概要
JTextAreaなどのテキストコンポーネントから一行ずつ文字列を取り出してそれを処理します。サンプルコード
#screenshot
解説
上記のサンプルでは、JTextArea#getText()
ですべてのテキストを取得してからStringTokenizer
を使って行毎に分解しています。returnDelims
フラグがfalse
なのでトークンが空行になることはありません。
サンプルコード
int count = 0; StringTokenizer st = new StringTokenizer(textArea.getText(), "\n") ; while(st.hasMoreTokens()) { if(st.nextToken().startsWith("#")) { count = count + 1; } } //Document doc = textArea.getDocument(); //Element root = doc.getDefaultRootElement(); //try{ // for(int i=0;i<root.getElementCount();i++) { // Element elem = root.getElement(i); // String line = doc.getText(elem.getStartOffset(), // elem.getEndOffset()-elem.getStartOffset()); // if(line.startsWith("#")) { // count = count + 1; // } // } //}catch(BadLocationException ble) { // ble.printStackTrace(); // count = -1; //}
- -
-
String#split(...)
を使用する場合- 空行あり
- &jnlp;
- &jar;
- &zip;
#spanend #spanadd for (String line: textArea.getText().split("\\n")) { #spanend if (!line.isEmpty() && line.codePointAt(0) == '#') { count++; } #spanadd } #spanend #spanadd
解説
上記のサンプルでは、JTextArea#getText() ですべてのテキストを取得し、StringTokenizer を使って行毎に分解しています。-
LineNumberReader
を使用する場合- 空行あり
#spanend
#spanadd
try (LineNumberReader lnr = new LineNumberReader(new StringReader(txa.getText()))) {
#spanend
String line = null;
while ((line = lnr.readLine()) != null) {
if (!line.isEmpty() && line.codePointAt(0) == '#') {
count++;
}
}
#spanadd
} catch (IOException ioe) {
#spanend
ioe.printStackTrace();
#spanadd
}
#spanend
#spanadd
コメント
-
Element#getElementCount()
を使用する場合- 空行なし(
Element
には少なくとも長さ1
の改行が存在する)
- 空行なし(
#spanend
#spanadd
Document doc = textArea.getDocument();
#spanend
#spanadd
Element root = doc.getDefaultRootElement();
#spanend
#spanadd
try {
#spanend
for (int i = 0; i < root.getElementCount(); i++) {
Element elm = root.getElement(i);
String line = doc.getText(
elm.getStartOffset(), elm.getEndOffset() - elm.getStartOffset());
if (line.codePointAt(0) == '#') {
count++;
}
}
#spanadd
} catch (BadLocationException ble) {
#spanend
ble.printStackTrace();
#spanadd
}
#spanend
#spanadd
参考リンク
- StringTokenizer (Java Platform SE 8)
- LineNumberReader (Java Platform SE 8)
- Element#getElementCount() (Java Platform SE 8)