在 java 中的特定单词之间读取字符文件

Reading character files between specific word in java

我有一个 java 文件,FileJava.java 像这样:

public class FileJava {
public static void main(String args[]) {
    for (int i = 0; i < 5; i++) {

    }
}

}

然后,我使用以下代码逐行阅读上面的代码:

import java.util.List;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

public class FileReplace {
 List<String> lines = new ArrayList<String>();
 String line = null;


public void  doIt() {
    try {
        File f1 = new File("FileJava.java");

        FileReader fr = new FileReader(f1);
        BufferedReader br = new BufferedReader(fr);

        while ((line = br.readLine()) != null) {

            if (line.contains("for"))
                {
                    lines.add("long A=0;");

                    if(line.contains("(") && line.contains(")")){
                        String get = line;
                        String[] split = get.split(";");

                        String s1 = split[0];
                        String s2 = split[1];
                        String s3 = split[2];


                    }
            }
            lines.add(line);
        }
        fr.close();
        br.close();

        FileWriter fw = new FileWriter(f1);
        BufferedWriter out = new BufferedWriter(fw);
        for(String s : lines)
             out.write(s);
        out.flush();
        out.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public static void main(String args[]) {
    FileReplace fr = new FileReplace();
    fr.doIt();

}

}

问题是,如何读取 FileJava.java 中 (for) 中 '(' 和 ')' 之间的字符,我的意思是 "int i = 0; i < 5; i++" 将存储在变量中的字符,我已经根据“;”进行了拆分,但是当我打印时,值:

s1 = for (int i = 0
s2 = i < 5
s3 = i++) {

虽然我期待:

s1 = int i = 0
s2 = i < 5
s3 = i++

谢谢

如果你想读取 java 文件的内容,你最好使用 AST(抽象语法树)解析器,它会读取文件的内容,然后在它执行时回调遇到某些表达式。在你的情况下,你可以只听 'for' 循环。

要回答您的问题,如何将拆分限制在括号内的部分:

String[] split =
   get.substring( get.indexOf('(')+1, get.indexOf(')').split("\s*;\s*");

编辑解决另一个问题。

文件的打印将全部发生在一行中,因为 BufferedReader.readLine 从 returns 行中删除了行尾(LF,CRLF)。因此,在写的时候加一个换行符:

for(String s : lines){
    out.write(s);
    out.newLine();
}
int index1 = line.indexOf("(");
int index2 = line.indexOf(")");
line = line.subString(index1 + 1, index2);

这是因为你在“;”上分手对于输入

for (int i = 0; i < 5; i++) {

这将 return ';' 之间的所有字符

您可以编写一个新方法,例如 getBracketContent,类似于

String getBracketContent(String str)
{
    int startIdx = str.indexOf('(')
    int endIdx = str.indexOf(')')

    String content = str.subString(startIdx + 1, endIdx);
}

那么您的代码将是

if(line.contains("(") && line.contains(")")){
                    String get = getBracketContent(line);
                    String[] split = get.split(";");

理想情况下,我会使用正则表达式来解析您需要的信息,但这可能是您稍后可能需要研究的内容。