0

この文字列を電子メールの本文から抽出しました

"DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien"

"71222222"文字列、"urgent"およびを抽出しようとしています"rien"

クラス Scanner を試しましたが、うまくいきませんでした。

Javaでそれを行うための最良のソリューションはどれですか?

4

5 に答える 5

3

次のように、正規表現を使用できます。

String s = "#DESTINATION: 71222222\n"+
    "#PRIORITY: urgent\n"+
    "#AUTRE: rien";
Pattern p = Pattern.compile("(?<=: )[^ ]+$", Pattern.MULTILINE);
Matcher m = p.matcher(s);
while(m.find()) {
    System.out.println(m.group(0));
}

このソリューションの核となるのは、次の正規表現です: (?<=: )[^ ]+$. ": "これは、コロン + スペースシーケンスに続き、行末までの一連の非スペース文字に一致します$

ideone のデモ:リンク.

于 2012-10-04T10:55:47.133 に答える
1

これを試して

String text = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien";

String[]lines = text.replace(": ", ":").split(" ");     
String[]values = new String[lines.length];
int i=0;
for(String line : lines){
   values[i++] = line.split(":")[1];
}
System.out.println(Arrays.toString(values));

出力は

[ 71222222,  urgent,  rien]

これを試すこともできます

String text = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien";

StringTokenizer tokinizer = new StringTokenizer(text,": ");

while(tokinizer.hasMoreTokens()) {
    tokinizer.nextToken();  //skip first
    System.out.println(tokinizer.nextToken());
}
于 2012-10-04T10:55:36.957 に答える
1

スキャナーを使用して、必要な情報を抽出できます。

final String input = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien";

final Scanner scanner = new Scanner(input).useDelimiter("\\w+: ");

while(scanner.hasNext()) {
    System.out.println(scanner.next());
}

これは以下を出力します:

71222222 
urgent 
rien
于 2012-10-04T11:07:30.187 に答える
0

これを試して。正規表現を使用して、文字列を空白 (\s) で分割します

        String str  = "DESTINATION: 71222222 PRIORITY: urgent AUTRE: rien";
        String[] split = str.split("\\s");
        System.out.println(split[1]+" - "+split[3]+" - "+split[5]);
于 2012-10-04T10:56:45.910 に答える
0

訂正: 質問が最初に入力文字列に入ったとき、改行が含まれていました。改行を削除するために質問が編集されたようです。それらがもう存在しない場合、私のソリューションは機能しません。

最初に考えたのは、キーと値のペアのマップを作成する解析ルーチンを作成することです。次に、名前でデータを取得できます。文字列内の順序は関係ありません。

import java.util.HashMap;
import java.util.Map;

class Main
{

    /**
     * This method parses a string of "key:value" pairs into a map. Parameter
     * pairs are separated by new-lines.
     * @param in the string to parse
     * @return the data map
     */
    static Map<String,String> parseParameters(String in) {

        Map<String,String> params = new HashMap<String,String>();

        int pos = 0;
        while(pos<in.length()) {
            int i = in.indexOf("\n",pos);
            if(i<0) i=in.length();
            String sub = in.substring(pos,i);
            pos = i+1;
            int j = sub.indexOf(":");
            if(j>=0) {
                String key = sub.substring(0,j).trim();
                String val = sub.substring(j+1).trim();
                //System.out.println(key+":"+val);
                params.put(key,val);
            }
        }

        return params;
    }

    public static void main( String args[] )
    { 
        String in = "#DESTINATION: 71222222\n#PRIORITY: urgent\n#AUTRE: rien";

        Map<String,String> params = parseParameters(in);

        // Get the data pieces by name
        System.out.println(params.get("#AUTRE"));
        System.out.println(params.get("#DESTINATION"));
        System.out.println(params.get("#PRIORITY"));

    }
}
于 2012-10-04T11:04:33.353 に答える