Java 如何将字符串中的一个字符与另一个字符串进行比较

Java 如何将字符串中的一个字符与另一个字符串进行比较,java,string,hex,decimal,Java,String,Hex,Decimal,可能重复: 我对Java相当陌生,为了练习,我正在尝试创建一个十六进制到十进制的数字转换器,因为我已经成功地制作了一个二进制到十进制的转换器 我遇到的问题基本上是将字符串中的给定字符与另一个字符串进行比较。这是我定义要比较的当前字符的方式: String current = String.valueOf(hex.charAt(i)); 以下是我尝试比较角色的方式: else if (current == "b") dec += 10 * (int)Math.pow(16, power

可能重复:

我对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
}

尝试将字符初始化为
charAt()返回的
char

然后在条件语句中使用文字字符:

else if (current == 'b') 

由于
char
是一个原语,因此可以使用
=
运算符对其进行比较。在前面的代码中,您使用
=
比较
字符串
,因为
字符串
对象
代码检查它们是否是相同的
对象
,而不是它们是否具有与
字符串.equals()
方法相同的值。

您需要使用equals方法比较字符串

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

您可以在此处找到更多详细信息:

将字符串更改为char。 字符电流=十六进制字符(i)

如果您需要检查“b”和“b”,请在您的else中

else if(当前=='b'| |当前=='b'){ }使用.equals()比较字符串。 当您使用==时,我认为它会检查它们是否都引用相同的东西


希望有帮助。:)

如果没有完整的代码,很难确定,但是“for input string:xx”表单通常是与NumberFormatException关联的消息。您是否碰巧使用Integer.valueOf()、Integer.parseInt()或类似方法将字符串(部分)转换为数字

如果是这种情况,为了让它们接受十六进制数字(a-f),您需要通过调用接受基数的第二个参数的方法来明确说明您正在传入一个16进制数字,例如Integer.valueOf(string,16)


此外,正如其他人已经指出的那样,比较字符串的正确方法是使用equals方法,因为==运算符只有在两个引用指向完全相同的对象时才会返回true,而不管其值(内容)。

实际上,有一种非常简单而优雅的方法:

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

我认为“在Java中将字符串转换为十六进制”很有用()Hello@IgorK,我正在使用另一种方法将十六进制数转换为十进制数。这不起作用,但实际上应该是这样的。我现在开始觉得我的代码可能还有其他问题。我应该把整个方法放在原来的帖子里吗?@Moka是的,多发一些总是好的code@Moka十六进制数字不都是大写的吗?你的条件句是用小写字母检查的,我的也是。可能需要将其设置为类似于
'B'
我这样做是为了将输入转换为小写。你的回答真的很有帮助,非常感谢你。@moka很高兴我能帮上忙。我已经按照Kevin的建议试过了,但似乎不起作用。输入字符串仍然是
“b”
。你能把整个方法放在这里吗?我猜你从Integer.valueOf()方法中得到了数字格式异常。尝试直接比较字符,如:if(current='0')、if(current='1'))像这样。如果将其转换为intI,我现在发布了完整的方法,是的,我经常使用Integer.valueOf()。这就是错误的来源。如上文所述,您可以简单地使用Integer.valueOf(hex.charAt(i),16)将每个数字转换为相应的整数,但由于这会破坏实践代码的要点,因此您可能需要简单地用if将转换十进制数字的部分包装起来,以确保所述数字是有效的十进制数字-即
if(“0123456789ABCDEFABCDDEF.contains(String.valueOf(hex.charAt(i)))
{//在这里进行数字转换}是的,这已经建立起来了,但它会破坏我练习的重点。我正在尝试学习Java并提高我的技能。
int result = Integer.parseInt(hex, 16);