替换长字符串中的字符串:

时间:2013-05-05 13:01:25

标签: java android string indexof

我有以下字符串:

  

您[员工姓名]在哪里?   你有[Shift]班次......

以及包含以下内容的字符串列表:

1。员工姓名

2。 Shift

我需要在长字符串的列表中找到给定的字符串,并将其替换为其他内容(包括[]字符)。 因此,例如,第一个字符串需要更改为:

  

你在哪儿Jhon Green?   你早班......

有没有简单的方法呢?使用IndexOf会给我这个字符串的位置,但我如何包含[]字符?

更新 这是我到目前为止测试的代码:

    Scanner sc = new Scanner(smsText);

    for (String s; (s = sc.findWithinHorizon("(?<=\\[).*?(?=\\])", 0)) != null;) 
    {
         words.add(s);
    }

    for (int j = 0; j < words.size(); j++)  
    {  
        Log.d(TAG, "The value for column: "+words.get(j) +" is: "+ rowData.getValue(words.get(j)));
        smsText.replaceFirst("\\[" + words.get(j) + "\\]", rowData.getValue(words.get(j)));
    }

    Log.d(TAG, "Final String is: "+ smsText);

没有给我正确的结果,字符串不会被替换。

UPDATE2: 对我有用的解决方案是:

    Scanner sc = new Scanner(smsText);

    for (String s; (s = sc.findWithinHorizon("(?<=\\[).*?(?=\\])", 0)) != null;) 
    {
         columnNames.add(s);
    }

    for (int j = 0; j < columnNames.size(); j++)  
    {  
        Log.d(TAG, "The value for column: "+columnNames.get(j) +" is: "+ rowData.getValue(columnNames.get(j)));
        smsText = smsText.replaceFirst("\\[" + columnNames.get(j) + "\\]", rowData.getValue(columnNames.get(j)));
    }
    Log.d(TAG, "Final String is: "+ smsText);

感谢大家的帮助。

4 个答案:

答案 0 :(得分:4)

String key = myColumns.getName();
s.replaceFirst("\\[" + key + "\\]", myReplacements.getReplacement(key));

您也可以使用indexOf,但如果使用替换功能,则会立即清楚您要执行的操作。

答案 1 :(得分:2)

试试这个

    String s = "Where Are You [Employee Name]? your have a [Shift] shift..";
    Map<String, String> replacementMap = new HashMap<>();
    replacementMap.put("[Employee Name]", "John Green");
    replacementMap.put("[Shift]", "morning");
    for(Entry<String, String> e : replacementMap.entrySet()) {
        s = s.replace(e.getKey(), e.getValue());
    }
    System.out.println(s);

输出

Where Are You John Green? your have a morning shift..

答案 2 :(得分:1)

一般解决方案可能如下所示:

String message = "Where are you [Employee Name]? You have a [Shift] shift!";
Map<String, String> variables = new HashMap<>();
variables.put("Employee Name", "John Green");
variables.put("Shift", "morning");
StringBuffer endResult = new StringBuffer();
Matcher m = Pattern.compile("\\[(.*?)\\]").matcher(message);
while (m.find()) {
    m.appendReplacement(endResult, variables.get(m.group(1)));
}
m.appendTail(endResult);
System.out.println(endResult.toString());

答案 3 :(得分:1)

我知道正则表达式在那里但是如果你想在这里使用递归函数它是

   public string replaceString(string str, string[] values, int index)
    {
        if (str.IndexOf('[') == -1 || str.IndexOf(']') == -1 || index > values.Length-1)
            return str;
        else

            return replaceString(str.Replace(str.Substring(str.IndexOf('['), (str.IndexOf(']') - str.IndexOf('['))+1), values[index]), values, ++index);
    }

调用此方法

     string strforreplac = "Where Are You [Employee Name]? your have a [Shift] shift...]";
           string[] strvalues = {"Emil","morning"};
      string newstring = replaceString(strforreplac,strvalues,0);