2

次のような文字列テンプレートがあります。

「ありがとう、これはあなたの値です: [値]。これはあなたの口座番号です: [accountNumber]」

そして、私は次のような入力をしています:

input 1 : "ありがとう、これはあなたの値です: 100. そしてこれはあなたの口座番号です: 219AD098"

入力 2 : "ありがとう、これはあなたの値です: 150. そしてこれはあなたの口座番号です: 90582374"

入力 3 : "ありがとう、これはあなたの値です: 200. そしてこれはあなたの口座番号です: 18A47"

次のような出力が必要です。

出力 1 : "[値] = 100 | [アカウント番号] = 219AD098"

出力 2: "[値] = 150 | [アカウント番号] = 90582374"

出力 3 : "[値] = 200 | [アカウント番号] = 18A47"

どうやってするか?多分正規表現を使用していますか?

注:テンプレートは修正されていません..修正されたのは[値]と[アカウント番号]だけです..

4

6 に答える 6

4

これを使ってregex

(?<=value : )(\d+)|(?<=number : )(.+)(?=")

これにより、必要な行から両方の値が抽出されます。それらを取得した後、出力文字列など、必要なものとそれらを連結できます。

これを使用するコードは次のregexようになります

Pattern pattern = Pattern.compile("(?<=value : )(\d+)|(?<=number : )(.+)(?=\")");
Matcher matcher = pattern.matcher(SOURCE_TEXT_LINE);
List<String> allMatches = new ArrayList<String>();
while (matcher.find()) {
 allMatches.add(matcher.group());
}

このようにして、この配列リストで一致する値を取得します。必要に応じて、単純な配列を使用できます。

于 2013-08-27T07:51:16.090 に答える
1
    String text = "Thanks, this is your value : 100. And this is your account number : 219AD098";
    Pattern pattern = Pattern
            .compile("Thanks, this is your value : (\\d+). And this is your account number : (\\w+)");
    Matcher matcher = pattern.matcher(text);
    matcher.find();
    String outputText = "[value] = " + matcher.group(1)
            + " | [accountNumber] = " + matcher.group(2);
    System.out.println(outputText);
于 2013-08-27T07:50:45.483 に答える
0

これも正規表現なしで簡単に行うことができます:

String input = getInput();

String[] inputLines = input.split("\n");
String output = "";
int counter = 1;

for(string line : inputLines)
{
   int subValStart = line.indexOf("value : ");
   string val = line.substring(subValStart, line.indexOf("|") - subValStart);
   string accNum = line.substring("account number : ");
   output += "output " + counter + " :\"[value] = "+ val + " | [accountNumber] = " + accNum + "\"\n"; 
   counter++;
}
于 2013-08-27T07:55:58.237 に答える
0

これを試してください、StringUtils.subStringBefore

   String sCurrentLine = CURRENT_LINE;
   String[] splitedValue = sCurrentLine.split(":");

   StringBuilder stringBuilder = new StringBuilder();
   stringBuilder.append(splitedValue[0].replace("input", "output"));
   stringBuilder.append(": \"[value] = "+StringUtils.substringBefore(splitedValue[2], "."));
   stringBuilder.append(" | [accountNumber] = "+splitedValue[3]);
于 2013-08-27T07:58:27.693 に答える