Java字符串比较

时间:2013-12-31 06:54:33

标签: java string arrays

我正在尝试实现一个简单的cesar密码。我在使用基于新键[]编码字符串的函数时遇到问题。我在这里展示了如何设置我的密钥。

private String[] alphabet =  {"a", "b", "c","d", "e", "f","g", "h", "i","j", "k", "l","m", "n", "o",
            "p", "q", "r","s", "t", "u","v", "w", "x","u", "z"};

public String[] CoderNewKey(int shift) {
    _NewKey = null;
    _NewKey = new String[25];

    for (int i = 0; i < 25; i++) {
        _NewKey[i] = alphabet[(i + shift) % 25];
    }
    return _NewKey;
}

我遇到的问题是Coder,if语句都不是真的,而rtnstring总是只是“”。

public String Coder(String[] key, String msg){
    String rtnstring = "";

    for ( int i = 0; i < msg.length();i++){

        for (int x = 0; x<26 ; x++){
            if ( msg.substring(i, i+1) == alphabet[x]){

                rtnstring.concat(key[x]);
            }if (msg.substring(i, i+1) == " "){

                rtnstring.concat(" ");
            }
        }
    }
    return rtnstring;
}

这是我编码器方法的逻辑。

它一次通过String msg 1个字母。它将字母与字母表中的索引匹配,然后根据给定键中的索引创建一个新字符串。

7 个答案:

答案 0 :(得分:9)

您希望使用char代替String; char值是单个字符,这是您正在使用的。要比较String个对象,您需要使用equals(),但可以将==char一起使用。

答案 1 :(得分:5)

您需要使用String类中的equals()方法。当您使用==时,您正在比较两个对象的引用变量(在您的代码中不相同)

  +----------+                        +----------+
  |          |     What you need      |          |
  |  "   " <-------to compare-----------> "a"    |
  |          |                        |          |
  |          |                        |          |
  +----------+                        +----------+
       ^                                   ^
       |                                   |
       +              What you             +
   rtnstring <------+ erroneously +---->  msg
                      compare

答案 2 :(得分:4)

在Java中,==总是只比较两个引用(对于非基元,即),即它测试两个操作数是否引用同一个对象。

但是,可以覆盖equals方法 - 因此两个不同的对象仍然可以相等。

例如:

String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });

System.out.println(x == y); // false
System.out.println(x.equals(y)); // true

答案 3 :(得分:2)

首先代替substring使用函数charAt,然后将String[]更改为char[],即

private char[] alphabet =  {'a', 'b', .... , 'z'};

if ( msg.charAt(i) == alphabet[x])

在您的示例中,您使用的是String,当您使用==时,它会比较引用,而substring函数将始终返回一个新的string,以避免此类问题的使用而是equals(String)

为了更好地理解,请阅读Java Documentation该示例将为您提供String初始化的详细信息以及references相等的含义。

答案 4 :(得分:1)

应使用equals()方法比较

字符串,而不是 == 。 equals()方法用于检查 String 文字有意义的等价是否

public String Coder(String[] key, String msg){
    String rtnstring = "";

    for ( int i = 0; i < msg.length();i++){

        for (int x = 0; x<26 ; x++){
            if ( msg.substring(i, i+1).equals(alphabet[x])){

                rtnstring.concat(key[x]);
            }if (msg.substring(i, i+1).equals(" ")){

                rtnstring.concat(" ");
            }
        }
    }
    return rtnstring;
}

答案 5 :(得分:1)

if ( msg.substring(i, i+1).equalIgnoreCase(alphabet[x])){
    rtnstring.concat(key[x]);
}
if (msg.substring(i, i+1).equalIgnoreCase(" ")){
    rtnstring.concat(" ");
}

如果是字符串,您的比较应使用equalIgnoreCaseequal,但如果您只想比较字符

// first define array of characters
private char[] alphabet =  {'a', 'b', ..... 'z'};
// then you can use ==
if ( msg.charAt(i)== alphabet[x]){
    rtnstring.concat(key[x]);
}
if (msg.charAt(i) == '\b')){
    rtnstring.concat(" ");
}

答案 6 :(得分:0)

私人Char [] alphabet = {'a','b','c','d','e','f','g','h','i','j', 'k','l','m','n','o','p','q','r','s','t','u','v','w ','x','u','z'};

我把你的String变成了char(字符)。如果您选择更改为char,则可以继续使用==。