3

次の文字列があります。

[従業員名] はどこにいますか? あなたは[シフト]シフトを持っています...

および以下を含む文字列のリスト:

1.従業員名

2.シフト

長い文字列のリストで指定された文字列を見つけて、それらを別のコンテンツ ([および]文字を含む) に置き換える必要があります。たとえば、最初の文字列を次のように変更する必要があります。

ジョン・グリーンはどこにいますか? あなたは朝のシフトを持っています...

それを行う簡単な方法はありますか?を使用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

4 に答える 4

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

を使用することもできますindexOfが、replace 関数を使用すると、何をしようとしているのかがすぐにわかります。

于 2013-05-05T13:03:40.247 に答える
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..
于 2013-05-05T13:11:55.653 に答える
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());
于 2013-05-05T13:10:53.663 に答える