2

このコードは壊れているようですが、理由はわかりません。

System.out.println(line);
// prints: Some Name;1|IN03PLF;IN02SDI;IN03MAP;IN02SDA;IN01ARC

String args[]            = line.split("|");
String candidatArgs[]    = args[0].split(";");
String inscrieriString[] = args[1].split(";");


System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(candidatArgs);
System.out.println("[0]:" + candidatArgs[0]);
System.out.println("[1]:" + candidatArgs[1]);

// prints: S
//         [Ljava.lang.String;@4f77e2b6
//         [0]:

なぜそうなるのか分かりません。私の論理によると:

String args[]            = line.split("|");
[0]: Some Name;1
[1]: IN02SDI;IN03MAP;IN02SDA;IN01ARC

それ以外の:

[0]: S

より多くのコードが必要な場合:これは、あまり機能しない場合でもコンパイルする必要があります(不要なコードをできるだけ削除しました)

主要:

ファイルを持っている: Candidati.txt

含む: Some Name;1|IN03PLF;IN02SDI;IN03MAP;IN02SDA;IN01ARC

import java.util.ArrayList;

Repository repository = new Repository ("Candidati.txt"); // file name

    ArrayList<Candidat> candidati = repository.getCandidati();
    System.out.println(candidati);

リポジトリ

import java.util.ArrayList;

public class Repository {

    private String fisierCuCandidati;

    private ArrayList<Candidat> listaCandidati;

    public Repository (String fisierCuCandidati) {

        this.fisierCuCandidati = fisierCuCandidati; // file name

        this.listaCandidati = new ArrayList<Candidat>();

        this.incarcaCandidati();
    }


    public void incarcaCandidati() {
        FileReader in = null;
        BufferedReader input = null;

        //try {


            in = new FileReader (this.fisierCuCandidati);
            input = new BufferedReader (in);

            String line;
            while ((line = input.readLine()) != null) {

                System.out.println(line);

                String args[]            = line.split("|");
                String candidatArgs[]    = args[0].split(";");
                String inscrieriString[] = args[1].split(";");


                System.out.println(args[0]);
                System.out.println(args[1]);
                System.out.println(candidatArgs);
                System.out.println("[0]:" + candidatArgs[0]);
                System.out.println("[1]:" + candidatArgs[1]);
            }


}

キャンディダット

public class Candidat {

    public Candidat (String nume) {

    }

    public Candidat (String nume, int id) {

    }
4

4 に答える 4

8

String.split正規表現を使用するため、特殊文字( OR|を意味する)であるパイプをエスケープする必要があります。

String args[] = line.split("\\|");

またString、表現ではなく配列出力を出力するには、次のObject.toStringものが必要です。

System.out.println(Arrays.toString(candidatArgs));
于 2013-02-13T13:15:56.417 に答える
4

をエスケープするpipeか、分割の文字クラス内で使用する必要があります。これは、正規表現をString#split取り、正規表現|のメタ文字です。したがって、代わりにこれを使用してください。

String args[] = line.split("\\|");

また:

String args[] = line.split("[|]");

キャラクタークラスが機能する理由は、キャラクタークラス内では、メタキャラクターには特別な意味がないためです。したがって、パイプは単なるパイプであり、交互の文字ではありません。

それに加えて、Arrays#toStringメソッドを使用して配列を出力する必要があります。

于 2013-02-13T13:16:02.767 に答える
1

|はJava正規表現の特殊文字であるため、のようにエスケープする必要があります\\|。私は一般的にします

line.split(Pattern.quote(separator))

ここで、Patternはhttp://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.htmlであり、separatorは使用するセパレーターです。これにより、特殊文字のエスケープが自動的に処理されます。

于 2013-02-13T13:19:27.450 に答える
1

への変更:

String args[]            = line.split("\\|");

のパラメータが正規表現であり、正規表現で特別な意味(または)を持っている|ため、機能しません。split|

于 2013-02-13T13:17:55.253 に答える