3

1回しかループしないforループメソッドに問題があります。何が問題ですか?配列内では全く問題ありませんでした、それは私が望む値を印刷することができました。

これが私のコードです:

public static void main(String[] args){

        String s = "Apple0, Apple1, Apple2, Apple3, Apple4";
        String[] word = s.split(",");
        StringBuffer str = new StringBuffer();
        Integer total = 0;

        for (int y = 0; y < word.length; y++){
            if(word[y].toString().equals("Apple2") ){
                total++;
                //str.append(word[y].toString());
            }else if(word[y].toString().equals("Apple3") ){
                total++;
                //str.append(word[y].toString());
            }else if(word[y].toString().equals("Apple4") ){
                total++;
                //str.append(word[y].toString());
            }
            else if(word[y].toString().equals("Apple1") ){
                total++;
                //str.append(word[y].toString());
            }


    }
        System.out.println( word[0] + word[1] + word[2] +  word[3] + word[4] + word.length);
        System.out.println(str + "hihi" + total);

}
4

5 に答える 5

6

他の人たちはあなたの問題の原因を突き止めました。しかし、彼らが提案する修正はかなり具体的すぎます...そして壊れやすいです。(分割するsplit("\\s*,\\s*")方が良いですが、文字列全体の最初/最後の空白には対応しません。)

引き続き使用することをお勧めしますがsplit(",")、テストする前に単語をトリミングしてください。例えば

  for (int y = 0; y < word.length; y++) {
        String trimmed = word[y].trim();
        if (trimmed.equals("Apple2")) {
            total++;
            //str.append(trimmed.toString());
        } else if (trimmed.equals("Apple3")) {
            // etcetera

またはそれ以上:

  String[] words = s.split(",");
  for (String word : words) {
        String trimmed = word.trim();
        if (trimmed.equals("Apple2")) {
            total++;
            //str.append(trimmed.toString());
        } else if (trimmed.equals("Apple3")) {
            // etcetera

これにより、コンマの前後や文字列の先頭と末尾の空白文字に関係なく、コードが機能するようになります。特に実装にほとんど費用がかからない場合は、堅牢性は良好です。

最後に、if / else if/...のものをJava7Stringswitchステートメントに置き換えることもできます。

于 2013-02-25T03:36:15.237 に答える
3

", "(スペースを入れて)分割してみてください

String[] word = s.split(", ");

分割されたスペースがないと、代わりにword[1]次のようになります" Apple1""Apple1"


word[y].trim().equals("Apple2")他のオプションは、その追加のスペースを取り除くために呼び出すことですが、分割に含める方が良いと思います。カンマの近くにいくつの空白があるかわからない場合は、この方法で分割しsplit("\\s*,\\s*")て、カンマの周りのすべての空白を含めることができます。


toString()また、Matt Ballが彼のコメントで指摘したようにword[y]、それはすでにStringであるため、呼び出す必要はありません。

于 2013-02-25T03:26:11.753 に答える
2

分割中はスペースを無視します。String [] word = s.split( "、");

于 2013-02-25T03:28:01.377 に答える
1

'は"、"で分割されていますが、文字列には "、"が含まれています。s.split(",");に変更できますs.split(", ");

または、次のように分割の結果をトリミングします。

public static void main(String[] args) {

        String s = "Apple0, Apple1, Apple2, Apple3, Apple4";
        String[] word = s.split(",");
        StringBuffer str = new StringBuffer();
        Integer total = 0;
        for (int y = 0; y < word.length; y++) {
            if (word[y].trim().equals("Apple2")) {
                total++;
                // str.append(word[y].toString());
            } else if (word[y].trim().equals("Apple3")) {
                total++;
                // str.append(word[y].toString());
            } else if (word[y].trim().equals("Apple4")) {
                total++;
                // str.append(word[y].toString());
            } else if (word[y].trim().equals("Apple1")) {
                total++;
                // str.append(word[y].toString());
            }

        }
        System.out.println(word[0] + word[1] + word[2] + word[3] + word[4]
                + word.length);
        System.out.println(str + "hihi" + total);

    }
于 2013-02-25T03:27:25.597 に答える
0

コードに問題はありませんが、問題は変数に与える文字列にあります。

String s = "Apple0, Apple1, Apple2, Apple3, Apple4";

ここでは、文字列の間にコンマの後にスペースが含まれています。文字列を分割すると、次のように分割されます。

word[0]= "Apple0"
word[1]= " Apple1"
word[2]= " Apple2"
word[3]= " Apple3"

等々。

あなたがのように比較するとき

word [y] .equals( "Apple1") "Apple1"と"Apple1"は2つの異なる文字列であるため、falseを返します。したがって、このように文字列を初期化します

String s = "Apple0,Apple1,Apple2,Apple3,Apple4"; // without white spaces

それはうまくいくでしょう。または、次のように文字列を変更せずに、既存のコードでトリムメソッドを使用できます。

word[y].trim().equals("Apple1") //It will trim all the leading and trailing white spaces.

お役に立てれば。

于 2013-02-25T03:51:53.123 に答える