如何将字符串的字符与数组的索引匹配

时间:2018-07-28 09:26:06

标签: java arrays string loops char

我有一个由数字组成的字符串,我想与单词数组的内容匹配。

输入字符串中的每个字符都与单词数组中的位置匹配。

如果我在i语句之前打印出jif的值,则它们是正确的0 and 03 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"}

3 个答案:

答案 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