2015-10-30 13 views
0

我怎麼能讀一個字符串(如下圖),更換`%rackname`或`用新的文本%sysname`Java的掃描儀讀取特殊格式的線

KW Actual `%rackname` -> KW Actual THE RACK NAME 
KW Difference `%rackname`-> KW Actual THE RACK NAME 
KW Predicted `%rackname` -> KW Actual THE RACK NAME 

Loads Capacity `%sysname`   -> Loads Capacity SYS NAME 
Loads Cost Difference `%sysname` -> Loads Cost Difference SYS NAME 
Loads EEPR `%sysname`    -> Loads EEPR SYS NAME 

我需要這個格式中適用於所有字符串一個arraylist,一些字符串會有多個變量來替換。

什麼是找到這些列出了這些更換領域的最佳途徑。

我首先想到的是用掃描儀掃描通過字符串使用next(),如果我找到一個詞開頭的`我讀到字符串的結尾,並找出該領域是什麼來代替。

List<String []> vars = new ArrayList<String[]>() {}; 
    int numfans, numsg, numcomp, numsys; 
    String [] newString; 
    String temp; 
    Scanner scan; 
    for(int i = 0; i < numRacks; i++){ 
     // do all racks 

     for(String s: rackStr){ 
      newString = new String[1];     
      scan = new Scanner(s); 
      while(scan.hasNext()){ 
       temp = scan.next(); 
       if(temp.startsWith("`") && temp.endsWith("`")){ 
        System.out.println("Temp: " + temp); 
        System.out.println("Success");       
        newString[0] += findVar(temp); 
       }else { 
        newString[0] += temp; 
       } 
      } 
      vars.add(newString); 
     } 

我想這可能是可怕的,如果我要創建一個新的掃描儀在多的ArrayList,我將有充分的字符串。

編輯 - 確定這樣str.replaceAll();是這樣的簡單的解決方案/捂臉

+0

掃描儀是用於讀取和解析,不更換。 String類已經有了不錯的替換方法 - 爲什麼不使用它們呢? –

回答

1

使用String.replaceAll更換模式中的字符串,例如:

str = str.replaceAll("`%rackname`", "THE RACK NAME"); 
str = str.replaceAll("`%sysname`", "SYS NAME"); 
+0

哇...我怎麼沒有看到這個功能 –