我有一个由数字组成的字符串,我想与单词数组的内容匹配。
输入字符串中的每个字符都与单词数组中的位置匹配。
如果我在i
语句之前打印出j
和if
的值,则它们是正确的0 and 0
,3 and 3
等。循环但请不要在下面输入if
语句。请帮助我理解原因。
String input = "0356";
String[] words = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String[] result = new String[4];
for (int i = 0; i < input.length(); i++) {
for (int j = 0; j < words.length; j++) {
if (Character.toString(input.charAt(i)) == Integer.toString(j)) {
result[i] = words[j];
}
}
}
我正在寻找的结果:
result[] = {"zero","three","five","six"}
答案 0 :(得分:2)
比较String时,您需要使用equals()
而不是==
所以改变
if (Character.toString(input.charAt(i)) == Integer.toString(j))
到
if (Character.toString(input.charAt(i)).equals(Integer.toString(j)))
答案 1 :(得分:0)
您可以直接将其转换为整数,而不用使用String。
if (Integer.parseInt(String.valueOf(input.charAt(i))) == j)
输出:
jshell> for (int i = 0; i < input.length(); i++) {
...> for (int j = 0; j < words.length; j++) {
...> if (Integer.parseInt(String.valueOf(input.charAt(i))) == j)
...> {
...> result[i] = words[j];
...> }
...> }
...> }
jshell> System.out.println(Arrays.toString(result));
[zero, three, five, six]
PS:您需要注意的一件事是parseInt抛出 NumberFormatException,因此请确保始终输入字符串 有数字(也许您可以通过正则表达式对其进行验证)或处理 正确地例外
答案 2 :(得分:0)
Java 8流的替代方法可能是:
import java.util.Arrays;
public class numberToWords {
public static void main(String args[]) {
String input = "0356";
String[] words = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
String[] result = Arrays.stream( // Convert to stream
input.split("")) // split each number
.map(e -> words[Integer.valueOf(e)]) // map each number to the corresponding word index
.toArray(String[]::new); // return the resulting array
for (String string : result) {
System.out.println(string);
}
}
}
结果:
zero
three
five
six