在 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(";");
理想情况下,我会使用正则表达式来解析您需要的信息,但这可能是您稍后可能需要研究的内容。
我有一个 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(";");
理想情况下,我会使用正则表达式来解析您需要的信息,但这可能是您稍后可能需要研究的内容。