如何比较两个字符?

问题描述 投票:0回答:4

情况:我有两个字符串存储在字符串数组中。

目标:我想将两个字符串中的所有字符添加到字符串变量

out

String out = "";
for(int i = 0; i < strArr[0].length(); i++){
    char x = strArr[0].charAt(i);
    for(int j = 0; j < strArr[1].length(); j++){
        char y = strArr[1].charAt(j);
        if(x.equals(y)){
            out.concat(x + ",");
        }
    }
}

if(out.equals("")){
    out = "false";
}

问题:当我运行代码时,出现以下错误:

char cannot be dereferenced
        if(x.equals(y)){
            ^

我也尝试过这个:

if(x == y){
    out.concat(x + ",");
}

但是也不起作用。

java char equals
4个回答
2
投票

要比较两个

char
值,请使用 == 运算符
x == y

它似乎不起作用的原因是另一个:您使用的out.concat()

方法不会修改
out
。一般来说,字符串是“不可变的”——你不能改变字符串的值。

使用 StringBuilder 而不是 String 作为

out

 变量。

StringBuilder out = new StringBuilder(); for(int i = 0; i < strArr[0].length(); i++){ char x = strArr[0].charAt(i); for(int j = 0; j < strArr[1].length(); j++){ char y = strArr[1].charAt(j); if (x == y){ out.append(x + ","); } } }
    

1
投票
将原始类型与

==

 进行比较。

字符串是不可变的。

调用

out.concat("whatever")

 不会更改 
out
 的值。您必须将返回值分配给
out

if(x == y){ // compare primitive with == out = out.concat(x + ","); // assign the returned value }
    

0
投票
其他人提到了您遇到的问题

String

 是不可变的,我会更进一步并建议一种替代方法来迭代字符串。 
HashSet<T>
 有两种方法可以简化您的代码。 
addAll
retainAll

String out = ""; HashSet<String> hashSet = new HashSet<>(); hashSet.addAll(strArr[0]); hashSet.retainAll(strArr[1]); out = hashSet.toString(); if(out.equals("")){ out = "false"; }
    

0
投票
我需要使代码尽可能简单、快速,以便将其移植到 android java 中。

我发现西装是 ASCII 顺序 C D H S

但是 suite 的值不是按 ASCII 顺序排列的。我将 10、J、Q、K A 的值重新映射到字符 A、B、C、D、E,以使其符合 ASCII 顺序。

//int posCard = beforeOrAfter(card2Sort, cardIterate, 0, iterMax); int posCard = beforeOrAfter2(card2Sort, cardIterate);
 而 beforeOrAfter2 是 

/* -1 wordA before wordB * 0 wordA equal wordB * 1 wordA after wordB * suite order less C D H S higher * value suit less 0 1 2 3 4 5 6 7 8 9 A J K Q * map 10 to A * J to B * Q to C * K to D * A to E */ private static int beforeOrAfter2(String wordA, String wordB) { //System.out.print("word "+wordA+" "+wordB+" "); // debug char charA = wordA.charAt(wordA.length()-1); char charB = wordB.charAt(wordB.length()-1); System.out.println(wordA+" "+wordB+" End "+charA+" "+charB+" "); // debug if (charA<charB) { return -1; } else if (charA>charB) { return 1; } else { // equal charA = wordA.charAt(wordA.length()-2); charB = wordB.charAt(wordB.length()-2); // mapping charA to correct order if (charA=='0') { charA='A'; } else if (charA=='J') { charA='B'; } else if (charA=='Q') { charA='C'; } else if (charA=='K') { charA='D'; } else if (charA=='A') { charA='E'; } // mapping charB to correct order if (charB=='0') { charB='A'; } else if (charB=='J') { charB='B'; } else if (charB=='Q') { charB='C'; } else if (charB=='K') { charB='D'; } else if (charB=='A') { charB='E'; } System.out.println(" First "+charA+" "+charB); // debug if (charA<charB) { return -1; } else if (charA>charB) { return 1; } } return 0; }
    
© www.soinside.com 2019 - 2024. All rights reserved.