• title: JTextAreaから一行ずつ文字列を取得 tags: [JTextArea, StringTokenizer, LineNumberReader] author: aterai pubdate: 2006-10-09 description: JTextAreaなどのテキストコンポーネントから一行ずつ文字列を取り出してそれを処理します。

概要

JTextAreaなどのテキストコンポーネントから一行ずつ文字列を取り出してそれを処理します。

サンプルコード

int count = 0;
StringTokenizer st = new StringTokenizer(textArea.getText(), "\n") ;
while(st.hasMoreTokens()) {
  if(st.nextToken().startsWith("#")) {
    count++;
  }
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JTextArea#getText()ですべてのテキストを取得し、StringTokenizerを使って行毎に分解しています。


  • String#splitを使用する場合
for(String line: textArea.getText().split("\\n")) {
  if(line.startsWith("#")) {
    count++;
  }
}
  • LineNumberReaderを使用する場合
try(LineNumberReader lnr = new LineNumberReader(new StringReader(textArea.getText()))) {
  String line = null;
  while((line = lnr.readLine()) != null) {
    if(line.startsWith("#")) {
      count++;
    }
  }
}catch(IOException ioe) {
  ioe.printStackTrace();
}
  • Element#getElementCountを使用する場合
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++;
    }
  }
}catch(BadLocationException ble) {
  ble.printStackTrace();
}

コメント