这个程序应该转换为:
\hyp76{a,1+a-b}b{xy}
为:
\HyperpFq{7}{6}@@{a,1+a-b}{b}{xy}.
如您所见,如果组的内容是一个字符,则没有括号。但是,当其中一个带括号的组位于一行的末尾时,它会跳过该组并将其视为单个字符(不带括号)的情况。我怎么能避免这个?谢谢。这是我的代码:
static int checkNestedBrackFront(String line, int pos){
int count=0;
for(int i=pos;i<line.length();i++ ){
if(line.charAt(i)=='{')
count++;
if(line.charAt(i)=='}'&&count==0)
return i;
if(line.charAt(i)=='{')
count--;
}
return 0;
}
line = new Scanner(new File("KLSadd.tex")).useDelimiter("\\Z").next();
PrintWriter writer = new PrintWriter("Converted.tex");
while(line.contains("\\hyp76")){
int posHyp = line.indexOf("\\hyp76");
String beforeHyp = line.substring(0,posHyp);
int start = posHyp+7;
String firstArgs = line.substring(start, line.indexOf("}", start));
if(line.charAt((line.indexOf("}", start)+1))!='{'&&!(line.substring(start, start+4).contains("\n"))){ //this is to check for single characters
secArgs = line.substring(line.indexOf("}", start) + 1,line.indexOf("}", start) + 2 );
posSec=line.indexOf("}", start)+1;
}
else {
int posBrack = line.indexOf("{", line.indexOf("}", start));
posSec = checkNestedBrackFront(line, posBrack+1);
secArgs = line.substring(posBrack+1, posSec);
}
if((line.charAt(posSec+1)!='{')&&!(line.substring(posSec,posSec+4).contains("\n"))){ //this is to check for single characters
System.out.println(line.charAt(posSec+1)+"hello");
thirdArgs= line.substring(posSec+1,posSec+2);
afterHyp=line.substring(posSec+2);
}
else{
int posThirdBrack = line.indexOf("{", posSec);
int posThird = checkNestedBrackFront(line, posThirdBrack+1);
thirdArgs = line.substring(posThirdBrack+1,posThird);
afterHyp = line.substring(posThird+1);
}
line=beforeHyp+"\\HyperpFq{7}{6}@@{"+firstArgs+"}{"+secArgs+"}{"+thirdArgs+"}"+afterHyp;
}
writer.print(line);
writer.close();
答案 0 :(得分:0)
PrintWriter writer = new PrintWriter("Converted.tex");
Scanner scanner = new Scanner(new File("KLSadd.txt"))
.useDelimiter("\n");
while (scanner.hasNext()) {
String lne = scanner.next();
String[] lines = lne.split("YOUR DELIMETER");
for(int j=0;j<lines.length;j++){
line = lines[j];
//the rest of your logic goes here
}