1

プラス記号で区切られた一連のタグを含むプレーンテキストの行があります。

event name @location +tag1 +tag2 +tag3 +tag4

データフィールドは常に同じ順序で表示されます:名前、場所、タグ。名前と場所のインスタンスは常に1つだけですが、1つ以上のタグが存在する場合があります。Javaで.NETStringSplitメソッド(すべての区切り文字列を配列に書き込む)を複製できるようにしたいのですが、それを実行することに頭を悩ませているようには見えません。

上記の例のタグフィールドに必要な出力は次のとおりです。

tag[0] = tag1
tag[1] = tag2
tag[2] = tag3
tag[3] = tag4

まず、私が見つけることができる最も近い方法は、split正規表現を使用する方法です。しかし、最初の+の前にある文字を配列からEXCLUDEに正規表現をコーディングする方法がわかりません。

特定の行のカウントを取得+し、forループを使用して解析および作成することを考えましtagString[count-of-plusses]たが、それは1行での複数のインスタンスをステップスルーします+nnnnnか?

これにアプローチするための良い方法に関する提案はありますか?

4

7 に答える 7

2

Stringのjavadocを具体的に見ると、次のようになります。

public String[] split(String regex)

これにより、文字列を好きなように分割して、文字列の配列を返すことができます。

このメソッドのバージョンをlimitパラメーターとともに使用することもできます。これを最初に使用して、すべてのものを削除してから、パラメーターなしで再度実行できるようにしlimitます。

于 2012-07-13T15:35:56.247 に答える
2

文字列を分割して、最初の項目なしで返された配列をコピーできます。

String s ="event name @location +tag1 +tag2 +tag3 +
String[] items = s.split("\\+");

//remove the `event name  @location` part
String[] tags = new String[items.length - 1];
System.arraycopy(items, 1, tags, 0, items.length - 1); 

関連する健全性チェックを必ず追加してください(たとえば、アイテムの長さが1より大きい場合)。

于 2012-07-13T15:37:37.750 に答える
0

最初の文字の前に文字を削除するに+は、配列の最初の項目を無視します。

    String input = "+tag1+tag2+tag3+tag4";
    String[] splitted = input.split("\\+");     
    System.out.println(Arrays.toString(splitted));
    //returns [, tag1, tag2, tag3, tag4]

    input = "xxx+tag1+tag2+tag3+tag4";
    splitted = input.split("\\+");      
    System.out.println(Arrays.toString(splitted));
    //returns [xxx, tag1, tag2, tag3, tag4]
于 2012-07-13T15:40:16.730 に答える
0

これを試して。

String string = "event name @location +tag1 +tag2 +tag3 +tag4";                        
String[] ss = string.split(" ");
String[] tag = new String[ss.length - 3];
for (int i = 3 ; i < ss.length; i++) {
    tag[i-3] = ss[i].replace("+", "");
}
于 2012-07-14T11:39:40.813 に答える
0

文字列メソッドindexOf()およびsubString()を使用して、文字列の関連部分を取得します。つまり、最初の+の前のすべてを破棄します。

次に、区切り文字として+を指定したsplit()とtrim()を使用してこのサブストリングを処理し、空白を破棄します。

于 2012-07-13T15:35:37.907 に答える
0

正規表現を使用したくない場合は、http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.htmlを試してください

于 2012-07-13T15:39:19.833 に答える
0
input.split(" +")[1]     // you have "tag1 +tag2 +tag3 +tag4" now
     .split("\\s+\\+");  // you have {tag1, tag2, tag3, tag4} now
于 2012-07-13T15:43:29.803 に答える