2014-05-20 39 views
0

這個程序應該是什麼樣轉換:如何檢查是否有新線?

\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(); 
+1

非常混亂。嘗試澄清你的問題。什麼是單個字符的情況?什麼是括號內的情況?什麼是返回0的無用函數'checkNestedBrackFront'? – djb

回答

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 
      }