1

String[]複数のユーザーの詳細を含むを取得しました。このようなもの:

Wilson#$20#$Male=@=Raymond#$25#$Male=@=Sophie#$20#$Female

文字列を分割して複数の配列に整理したかったのです。の 1 つの配列Name、 の 1 つの配列Age、 の別の配列などGender。この時点まで、私はこのようなものに分割することができましたString[]

String[] User = student.split("=@=");

User[0] = Wilson#$20#$Male    
User[1] = Raymond#$25#$Male
User[2] = Sophie#$20#$Female

ここから先の整理の仕方がよくわかりません。コメントや回答は大歓迎です!

編集

Wilson#$20#$Male=@=Raymond#$25#$Male=@=Sophie#$20#$Female

上記の部分は実際にはサーバーから返される値であり、この値を処理したかったのです。すべての返信ありがとうございます。理論的には少し理解していると思いますが、コードの実装に少し問題があります。

4

5 に答える 5

2

ユーザーごとにクラスを作成するという提案に同意します。これはオブジェクト指向の方法です。そのため、以下の例に含めました。ただし、配列やその他の構造を作成したい場合は、おそらく簡単に変更できます。

ただし、追加したいのは、Java クラスを使用してjava.util.regex.Patternjava.util.regex.Matcher入力文字列からレコードとフィールドの両方を一度に抽出する方法です。(私はAndroid用にプログラムしていませんが、利用できると思います。)

パターンの一般的な計画は次のとおりです。 (レコード区切り文字またはなし)(field1)(delim)(field2)(delim)(lastfield)(レコード区切り文字 + 入力の残り)

アルゴリズムは基本的に、上記のパターンで入力をループします。このパターンは、フィールドのさまざまなグループを抽出し (レコードの形式に応じて)、入力文字列の残りを含む最後のグループも抽出します。この残りは、次のループの新しい入力文字列として使用されます。したがって、ループの反復ごとに 1 つのレコードが実行されます。

実行できるより完全なコード例を次に示します。アルゴリズムの重要な部分であるパターンを理解するには、正規表現について調べる必要があるかもしれません。java.util.regex.Patternクラスの Javadoc から始めることができます。

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestPatternMatch {
    public static void main(String[] args) {
        List<User> result = new ArrayList<>();
        String input =
                "Wilson#$20#$Male=@=Raymond#$25#$Male=@=Sophie#$30#$Female";
        Pattern recPatt =
                Pattern.compile("^(=@=|.{0})(.+?)#\\$(\\d+)#\\$(.+?)(?==@=)(.*$)");
        //                       ^match start of line
        //                        ^match record delimiter or nothing
        //                                  ^match name field (reluctant)
        //                                       ^match field delim
        //                                           ^match age field
        //                                                 ^match field delim
        //                                   match gender field^
        // zero-width (non recording) lookahead for record delimiter^
        //                                     match rest of line until end^

        Matcher recMatcher;
        String workStr = input; // start with whole input
        while (workStr != null && workStr.length() > 0) {
            recMatcher = recPatt.matcher(workStr);
            if (recMatcher.matches() && recMatcher.groupCount() >= 5) {
                result.add(
                        new User(
                                recMatcher.group(2), //name
                                Integer.parseInt(recMatcher.group(3)), //age
                                recMatcher.group(4) //gender
                        )
                );
                workStr = recMatcher.group(5); // use tail for next iteration
            } else {
                workStr = null;
            }
        }
        System.out.println(result); //show result list contents
    }
}

class User {
    String  name;
    int     age;
    String  gender;
    /** All argument constructor */
    public User(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    /** Show contents of object fields */
    public String toString() {
        return "User ["+ name + ", " + age + ", " + gender + "]";
    }
}

基本的なパターン構造は、さまざまなレコード形式で再利用できます。

于 2013-03-06T13:29:01.813 に答える
2

すべてのフィールド (名前、年齢、性別) を格納するユーザー オブジェクトを作成し、すべてのデータを保持するリストを作成します。

于 2013-03-06T10:04:15.303 に答える
1

クラスを作成し、インスタンスUserのリストを維持してみませんか。User

class User {

  String name;
  String gender;
  int age;

}
于 2013-03-06T10:07:46.487 に答える