JTextAreaから一行ずつ文字列を取得
Total: 15909
, Today: 3
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JTextArea
などのテキストコンポーネントから一行ずつ文字列を取り出してそれを処理します。
Screenshot
Advertisement
サンプルコード
int count = 0;
StringTokenizer st = new StringTokenizer(textArea.getText(), "\n");
while (st.hasMoreTokens()) {
if (st.nextToken().codePointAt(0) == '#') {
count++;
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTextArea#getText()
ですべてのテキストを取得してからStringTokenizer
を使って行毎に分解しています。returnDelims
フラグがfalse
なのでトークンが空行になることはありません。
String#split(...)
を使用する場合- 空行あり
for (String line: textArea.getText().split("\\n")) {
if (!line.isEmpty() && line.codePointAt(0) == '#') {
count++;
}
}
LineNumberReader
を使用する場合- 空行あり
try (LineNumberReader lnr = new LineNumberReader(new StringReader(txa.getText()))) {
String line = null;
while ((line = lnr.readLine()) != null) {
if (!line.isEmpty() && line.codePointAt(0) == '#') {
count++;
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
Element#getElementCount()
を使用する場合- 空行なし(
Element
には少なくとも長さ1
の改行が存在する)
- 空行なし(
Document doc = textArea.getDocument();
Element root = doc.getDefaultRootElement();
try {
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++;
}
}
} catch (BadLocationException ble) {
ble.printStackTrace();
}
参考リンク
- StringTokenizer (Java Platform SE 8)
- LineNumberReader (Java Platform SE 8)
- Element#getElementCount() (Java Platform SE 8)