0

基本的に私がやろうとしているのは、文字列を取り、内部のアルファベットの各文字を置き換えますが、スペースを保持し、それらを「ヌル」文字列に変換しないことです。これが、この質問を開く主な理由です。

以下の関数を使用して文字列「a b」を渡すと、「ALPHA BETA」ではなく「ALPHAnullBETA」が返されます。

現在反復処理されている個々の文字がスペースであるかどうかを確認するすべての可能な方法を試しましたが、何も機能していないようです。これらのシナリオはすべて、通常の文字であるかのように false を返します。

public String charConvert(String s) {

    Map<String, String> t = new HashMap<String, String>(); // Associative array
    t.put("a", "ALPHA");
    t.put("b", "BETA");
    t.put("c", "GAMA");
    // So on...

    StringBuffer sb = new StringBuffer(0);
    s = s.toLowerCase(); // This is my full string

    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);

        String st = String.valueOf(c);
        if (st.compareTo(" ") == 1) {
            // This is the problematic condition
            // The script should just append a space in this case, but nothing seems to invoke this scenario
        } else {
            sb.append(st);
        }

    }

    s = sb.toString();

    return s;
}
4

6 に答える 6

5

compareTo()文字列が等しい場合は 0 を返します。最初の文字列が 2 番目の文字列よりも大きい正の数を返します。

しかし、実際には文字列を比較する必要はありません。代わりに、次のようなことができます。

char c = s.charAt(i);

if(c == ' ') {
    // do something
} else {
    sb.append(c);
}

または、ユースケースにさらに適しています:

String st = s.substring(i,i+1);
if(t.contains(st)) {
    sb.append(t.get(st));
} else {
    sb.append(st);
}

さらにきれいなコードを取得するには、 MapをではなくからCharacterにする必要があります。String<String,String>

于 2012-07-17T22:07:02.807 に答える
2

String.compareTo()文字列が等しい場合は 1 ではなく 0 を返します。詳細については、こちらを参照してください。

この場合、文字を文字列に変換する必要がないことに注意してください。

if(c == ' ') 
于 2012-07-17T22:05:38.680 に答える
1

使用する

 Character.isWhitespace(c)  

それは問題を解決します。ベストプラクティス。

于 2012-07-17T22:10:06.450 に答える
0

String の compareTo メソッドは、ソース文字列がテスト文字列より前にある場合は -1、等しい場合は 0、ソース文字列が後にある場合は 1 を返します。コードは 1 をチェックし、0 をチェックする必要があります。

于 2012-07-17T22:08:56.893 に答える
0

まず、sこの例は何ですか?コードをたどるのは難しいです。次に、あなたのcompareToはオフのようです:

if (st.compareTo(" ") == 1)

する必要があります

if (st.compareTo(" ") == 0)

0 は「等しい」を意味するため ( compareToを参照)

于 2012-07-17T22:07:04.797 に答える
0

compareTo ドキュメントから:The result is a negative integer if this String object lexicographically precedes the argument string. The result is a positive integer if this String object lexicographically follows the argument string. The result is zero if the strings are equal;

あなたは間違った状態を持っていますif (st.compareTo(" ") == 1) {

于 2012-07-17T22:07:28.667 に答える