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

在java中读取特定单词之间的字符文件,java,java-io,Java,Java Io,我有一个java文件,FileJava.java,如下所示: public class FileJava { public static void main(String args[]) { for (int i = 0; i < 5; i++) { } } 公共类FileJava{ 公共静态void main(字符串参数[]){ 对于(int i=0;i

我有一个java文件,FileJava.java,如下所示:

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

    }
}
公共类FileJava{
公共静态void main(字符串参数[]){
对于(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();

}
import java.util.List;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.util.ArrayList;
公共类文件替换{
列表行=新的ArrayList();
字符串行=null;
公共无效doIt(){
试一试{
文件f1=新文件(“FileJava.java”);
FileReader fr=新的FileReader(f1);
BufferedReader br=新的BufferedReader(fr);
而((line=br.readLine())!=null){
如果(第行包含(“for”))
{
行。添加(“长A=0;”;
if(line.contains(“(”&&line.contains(“)”){
字符串get=line;
String[]split=get.split(“;”);
字符串s1=拆分[0];
字符串s2=拆分[1];
字符串s3=拆分[2];
}
}
行。添加(行);
}
fr.close();
br.close();
FileWriter fw=新的FileWriter(f1);
BufferedWriter out=新的BufferedWriter(fw);
用于(字符串s:行)
写出。写出(s);
out.flush();
out.close();
}捕获(例外情况除外){
例如printStackTrace();
}
}
公共静态void main(字符串参数[]){
FileReplace fr=newfilereplace();
doIt()神父;
}
}

问题是,如何读取文件java.java(for)中“(”和“)”之间的字符,我指的是存储在变量中的字符“int i=0;i<5;i++”,我根据“;”进行拆分,但打印时,值:

s1 = for (int i = 0
s2 = i < 5
s3 = i++) {
s1=for(int i=0
s2=i<5
s3=i++){
我希望:

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

谢谢

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

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

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

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

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

String[] split =
   get.substring( get.indexOf('(')+1, get.indexOf(')').split("\\s*;\\s*");
编辑以解决另一个问题

文件的打印将全部在一行中进行,因为BufferedReader.readLine会将行尾(LF,CRLF)从返回的行中剥离。因此,在写入时添加换行符:

for(String s : lines){
    out.write(s);
    out.newLine();
}

要回答如何将拆分限制在括号内的部分,请执行以下操作:

String[] split =
   get.substring( get.indexOf('(')+1, get.indexOf(')').split("\\s*;\\s*");
编辑以解决另一个问题

文件的打印将全部在一行中进行,因为BufferedReader.readLine会将行尾(LF,CRLF)从返回的行中剥离。因此,在写入时添加换行符:

for(String s : lines){
    out.write(s);
    out.newLine();
}

要回答如何将拆分限制在括号内的部分,请执行以下操作:

String[] split =
   get.substring( get.indexOf('(')+1, get.indexOf(')').split("\\s*;\\s*");
编辑以解决另一个问题

文件的打印将全部在一行中进行,因为BufferedReader.readLine会将行尾(LF,CRLF)从返回的行中剥离。因此,在写入时添加换行符:

for(String s : lines){
    out.write(s);
    out.newLine();
}

要回答如何将拆分限制在括号内的部分,请执行以下操作:

String[] split =
   get.substring( get.indexOf('(')+1, get.indexOf(')').split("\\s*;\\s*");
编辑以解决另一个问题

文件的打印将全部在一行中进行,因为BufferedReader.readLine会将行尾(LF,CRLF)从返回的行中剥离。因此,在写入时添加换行符:

for(String s : lines){
    out.write(s);
    out.newLine();
}

这是因为您正在为输入拆分“;”

for (int i = 0; i < 5; i++) {
那么你的代码就是

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

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

这是因为您正在拆分输入的“;”

for (int i = 0; i < 5; i++) {
那么你的代码就是

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

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

这是因为您正在拆分输入的“;”

for (int i = 0; i < 5; i++) {
那么你的代码就是

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

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

这是因为您正在拆分输入的“;”

for (int i = 0; i < 5; i++) {
那么你的代码就是

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

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

在拆分之前,您需要获得正确的
子字符串。
。是的,但我不知道如何使用此代码:if(line.contains(“”)&&line.contains(“”){@laune-请忽略。你是对的。在分割之前,你需要得到正确的
子字符串。是的,但我不知道如何,对这个代码有什么想法:if(line.contains(“(”&&line.contains(“)”){@laune-请忽略。你是对的。在分割之前,你需要得到正确的
子字符串。是的,但我不知道怎么做,对这个代码有什么想法:if(line.cont