从JTextPane中选择一个字符串的更有效方法?

时间:2012-06-29 12:46:37

标签: java swing file-io stringbuilder jtextpane

这不是我的代码不起作用,但我怀疑它是否非常高效。我的理论是,它不是xD

我有一个JTextPane,我必须在其中获取文本(每次JTextPane基本上获得一个新行时创建一个新行),并将其放入.txt文件中。正如我所说的一切正常但我怀疑它的执行情况。 这是我怀疑的部分:

public void printLog() {
    String s = logTextArea.getText();
    ArrayList<String> log = new ArrayList<>();
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < s.length(); i++) {
        if(s.charAt(i) != '\n') {
            sb.append(s.charAt(i));
        } else {
            log.add(sb.toString());
            sb.delete(0, sb.length());
        }
    }

这只是供参考的全部内容:

public void printLog() {
    String s = logTextArea.getText();
    ArrayList<String> log = new ArrayList<>();
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < s.length(); i++) {
        if(s.charAt(i) != '\n') {
            sb.append(s.charAt(i));
        } else {
            log.add(sb.toString());
            sb.delete(0, sb.length());
        }
    }
    File f = new File("JServer_Log.txt");
    BufferedWriter bw = null;
    FileWriter fr = null;
    try {
        if(f.exists()) {
            fr = new FileWriter(f,true);
        } else {
            fr = new FileWriter(f);
        }
    } catch (IOException e) {
        // Nothing to do really.
    }

    try {
        bw = new BufferedWriter(fr);
        Iterator<String> itr = log.iterator();
        bw.newLine();
        while(itr.hasNext()) {
            bw.write(itr.next());
            bw.newLine();
        }
    } catch (IOException e) {
        // Nothing to do really. We lost the log?
    } finally {
        try {
            bw.close();
        } catch(IOException ioe) {
            // The program is closing any way.
        }
    }
}

4 个答案:

答案 0 :(得分:2)

您似乎只需要确保使用平台的相应换行序列。你可以说s = s.replace("\n", System.getProperty("line.separator"))然后将整个字符串直接写入文件。事实上,就我所看到的方式而言,这就是您需要的所有代码(除非是异常处理,否则由您决定):

public void printLog() throws IOException {
  final FileWriter w = new FileWriter("JServer_Log.txt", true);
  try {
    w.write(logTextArea.getText().replace("\n", 
                                    System.getProperty("line.separator")));
  } finally { w.close(); }
}

答案 1 :(得分:2)

有关信息,第一个代码可以替换为:

List<String> log = Arrays.asList(logTextArea.getText().split("\n"));

但其他答案为您提供了替换整个方法的方法。

答案 2 :(得分:2)

为什么要打扰,使用JTextComponents.write(Writer out) throws IOExceptionwrite()这是非常接受换行符,标签,e.i。来自Native OS

答案 3 :(得分:0)

使用split

String[] log = s.split("\n");