2

以下の正規表現の提案を誰かに教えてもらえますか?

例:city^chennai|country^India~TamilNadu|pincode^600034

期待される区切られた文字列は次のとおりです。

city
chennai
country
India,TamilNadu
pincode
600034

注:~に変換する必要があります,

4

4 に答える 4

4

をコンマに置き換えた後、単語以外の文字 (コンマを除く) で分割するだけ~です。

input.replaceAll("~",",").split("[^\\w,]");

次に(マップを必要とするコメントに従って)結果の配列をペアで反復処理し、マップエントリを追加します。

ここにいくつかのテストコードがあります:

public static void main( String[] args ) {
    String input = "city^chennai|country^India~TamilNadu|pincode^600034";
    String[] things = input.replaceAll( "~", "," ).split( "[^\\w,]" );
    Map<String, String> map = new HashMap<String, String>( );
    for (int i = 0; i < things.length; i+=2) {
        map.put(things[i], things[i+1]);
    }
    System.out.println( map );
}

出力:

{pincode=600034, country=India,TamilNadu, city=chennai}
于 2012-07-04T05:45:54.137 に答える
0

これを使用できます:

.replaceAll("~", ",").split("[|^]")

文字列が適切に分割されていると仮定すると、インデックス 2k の文字列をインデックス (2k + 1) にマッピングすることで、名前と値のペアにグループ化できます。

于 2012-07-04T05:42:08.510 に答える
0

ここでクラスを使用StringTokenizerして、異なる区切り文字で文字列を分割できます。メソッドを使用hasNextToken("delimiterHereAsString")して、分割する別の区切り文字を指定します。

このリンクはあなたを助けるかもしれません。 http://www.java-examples.com/java-stringtokenizer---delimiter-example を指定

于 2012-07-04T05:43:37.380 に答える
0
((w+)[|^~])*(w+)

編集:今、私はそれが地図のようなものであることに気づいたので、おそらく:

((w+)^(w+)|)*(w+)^(w+)

w+ をカスタム クラスに置き換え[...]て、 ~ も機能するようにします。

Pattern p = Pattern.compile("((w+)^(w+)|)*(w+)^(w+)");
 Matcher m = p.matcher("city^chennai|country^India~TamilNadu|pincode^600034");
 if( m.matches() ){
     for( int i = 1; i < m.groupCount(); i+=2 ) {
         // m.group(i) and m.group(i+1) gives you the values.
     }
 }

もっと簡単な方法が必要な場合は、Pattern#split("")

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#split%28java.lang.CharSequence%29

于 2012-07-04T05:34:37.900 に答える