如何一个字符从另一个字符串的字符串比较[复制](How to compare one charact

2019-07-19 06:55发布

可能重复:
如何在Java中比较字符串?

我是相当新的Java和实践,我试图创建一个十六进制到十进制数转换器,因为我已经成功地设法使一个二进制到十进制转换器。

我遇到的问题与另一个字符串字符串基本上是比较给定的人物。 这是我如何定义当前的字符被比较:

String current = String.valueOf(hex.charAt(i));

这是我尝试比较字符:

else if (current == "b") 
   dec += 10 * (int)Math.pow(16, power);

当我尝试通过输入刚刚运行的代码编号,例如12,它的工作原理,但是当我尝试使用“B”,我得到一个奇怪的错误。 下面是运行程序的全部结果:

run:
Hello! Please enter a hexadecimal number.
2b
For input string: "b" // this is the weird error I don't understand
BUILD SUCCESSFUL (total time: 1 second)

下面是成功地只是一个数字转换运行程序的例子:

run:
Hello! Please enter a hexadecimal number.
22
22 in decimal: 34 // works fine
BUILD SUCCESSFUL (total time: 3 seconds)

任何帮助,这将不胜感激,谢谢。

编辑:我想如果我把整个方法这里将是有益的。

编辑2:解决了! 我不知道是谁的答案是因为他们都这么好,乐于助人,我应该接受,虽然。 所以冲突。

for (int i = hex.length() - 1; i >= 0; i--) {
        String lowercaseHex = hex.toLowerCase();
        char currentChar = lowercaseHex.charAt(i);

        // if numbers, multiply them by 16^current power
        if (currentChar == '0' || 
                currentChar == '1' || 
                currentChar == '2' || 
                currentChar == '3' || 
                currentChar == '4' || 
                currentChar == '5' || 
                currentChar == '6' || 
                currentChar == '7' || 
                currentChar == '8' || 
                currentChar == '9')
            // turn each number into a string then an integer, then multiply it by
            // 16 to the current power.
            dec += Integer.valueOf(String.valueOf((currentChar))) * (int)Math.pow(16, power);

        // check for letters and multiply their values by 16^current power
        else if (currentChar == 'a') 
            dec += 10 * (int)Math.pow(16, power);
        else if (currentChar == 'b') 
            dec += 11 * (int)Math.pow(16, power);
        else if (currentChar == 'c') 
            dec += 12 * (int)Math.pow(16, power);
        else if (currentChar == 'd') 
            dec += 13 * (int)Math.pow(16, power);
        else if (currentChar == 'e') 
            dec += 14 * (int)Math.pow(16, power);
        else if (currentChar == 'f') 
            dec += 15 * (int)Math.pow(16, power);
        else
            return 0;
        power++; // increment the power
    }

    return dec; // return decimal form
}

Answer 1:

尝试初始化一个字符的char由返回值charAt()

char current = hex.charAt(i);

然后在你有条件使用文字字符:

else if (current == 'b') 

由于char是一种原始的,你可以使用比较它==操作符。 在前者的代码你是一个比较String使用== ,因为StringObject的代码检查,看看他们是相同的Object不是他们是否有相同的值String.equals()方法会。



Answer 2:

如果没有全码是困难的是一定的,但“输入字符串:XX”形式,其通常是与NumberFormatException的关联的消息。 你的字符串(的一部分)转换为数字使用Integer.valueOf()的Integer.parseInt()或类似的方法是偶然?

如果这是为了让他们接受一个十六进制数字(AF),你需要明确说明你传递一个16位的基础的情况下,通过调用接受第二个参数为基数的方法 - 比如Integer.valueOf(串,16)。

此外,像其他人已指出,比较字符串的正确方法是使用equals方法,因为==操作符会如果两个引用指向完全相同的对象的值(内容)的唯一返回true,不管。



Answer 3:

你需要比较equals方法串

else if ("b".equals(current)) 

你可以在这里找到更多的细节: http://www.javabeginner.com/learn-java/java-string-comparison



Answer 4:

更改您的字符串为char。 炭电流= hex.charAt(ⅰ);

然后在你的别人,如果你需要检查“B”和“B”

否则,如果(当前== 'B' ||电流== 'B'){}



Answer 5:

使用.equals()比较字符串。 当您使用==我认为它会检查,如果他们都引用同样的事情或没有。

希望帮助。 :)



Answer 6:

其实,有一个非常简单而优雅的做这件事的方法:

int result = Integer.parseInt(hex, 16);


文章来源: How to compare one character from a string with another string [duplicate]