2013-11-27 102 views
0

同一主题:replace String with another in java更换阵列字符串与其他数组字符串

我想更换String Replace = "SUM(NewCounter)+SUM(NewCounter2)+NewCounter3";

Array A = {NewCounter, NewCounter2, NewCounter3}
说我有Array B = {test, testA, testB}

我想与阵列A用数组来代替它B in String Replace
我尝试使用方法ReplaceAll(A.get(index), B.get(index));

问题是:

NewCounter2由系统读"NewCounter"+2
所以我有结果= String Replace = "SUM(test)+SUM(test2)+test3";

我尝试在字符NewCounter使用' ,它将是Array A = {'NewCounter', 'NewCounter2', 'NewCounter3'}

但我必须改变字符串Replace像在此之前:

String Replace = "SUM('NewCounter')+SUM('NewCounter2')+'NewCounter3'"; 

有没有其他办法我吗? 我不想前改变串...

Thanksfull,

-mazipan-

+4

让我们看看你已经尝试了什么。 –

+5

很难弄清楚你的问题意味着什么。 –

+0

重复[一次替换文件中的多个子串](https://stackoverflow.com/questions/7661460/replace-multiple-substrings-in-a-file-at-once)。 – Boann

回答

2

的同时更换最简单的办法是处理字符串长度递减顺序。这将正确地进行替换:

A = {NewCounter3, NewCounter2, NewCounter} 
B = {testB, testA, test} 

但是,如果任何搜索字符串可以匹配替换字符串,此技术将不起作用。

编辑:对于一般情况下,我已经写了这一点:

public static String simultaneousReplace(String subject, 
     String[] find, String[] replace) { 
    if (find.length != replace.length) throw new IllegalArgumentException(
     "Strings to find and replace are not paired."); 
    int numPairs = find.length; 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0, len = subject.length(); i < len; i++) { 
     int longestMatchIndex = -1; 
     int longestMatchLength = -1; 
     for (int j = 0; j < numPairs; j++) { 
      String find1 = find[j]; 
      if (subject.regionMatches(false, i, find1, 0, find1.length())) { 
       if (find1.length() > longestMatchLength) { 
        longestMatchIndex = j; 
        longestMatchLength = find1.length(); 
       } 
      } 
     } 
     if (longestMatchIndex >= 0) { 
      sb.append(replace[longestMatchIndex]); 
      i += longestMatchLength - 1; 
     } else { 
      sb.append(subject.charAt(i)); 
     } 
    } 
    return sb.toString(); 
} 

用法示例:

String s = "SUM(NewCounter)+SUM(NewCounter2)+NewCounter3"; 

s = simultaneousReplace(s, 
    new String[] { "NewCounter", "NewCounter2", "NewCounter3" }, 
    new String[] { "test", "testA", "testB" } 
); 

System.out.println(s); 

输出:

SUM(test)+SUM(testA)+testB 
+0

谢谢,这是我想要的。 但这是很久以前的问题。 我甚至忘记了这个问题。 谢谢@Boann – mazipan

0

如果SUM就是一个String和不是一种方法,那么你可以使用:

String Replace = "SUM(" + NewCounter + ")SUM(" + NewCounter2 +")" + NewCounter3; 

如果总和是一个方法,那么你可以通过它周围使用

String Replace = SUM(NewCounter) + SUM(NewCounter2) + NewCounter3; 

虽然第二个你可能要投/转换为字符串

().toString() 

,或者是附加

(String)() 
0

Apache's commons-lang StringUtils#replaceEach优雅地处理这些问题。

运行的代码:

public static void main(String [] args) { 
    String replace = "SUM(NewCounter)+SUM(NewCounter2)+NewCounter3"; 
    String [] a = { "NewCounter", "NewCounter2", "NewCounter3" }; 
    String [] b = { "test", "testA", "testB" }; 

    System.out.println(StringUtils.replaceEach(replace, a, b)); 
} 

会给你

SUM(test)+SUM(test2)+test3

+0

“SUM(test)+ SUM(test2)+ test3”完全不是OP想要的。 – Boann

+0

我认为这是OP想要的。 – Bnrdo

+0

他想要“SUM(test)+ SUM(testA)+ testB”。 – Boann

相关问题