我有以下字符串:
您[员工姓名]在哪里? 你有[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);
感谢大家的帮助。
答案 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);