【问题标题】:How to find indexOf in a String array in Java如何在 Java 中的 String 数组中找到 indexOf
【发布时间】:2017-08-25 13:25:47
【问题描述】:
button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            String output = "";
            char[] input = textArea.getText().toUpperCase().toCharArray();
            int index;

            for (int i = 0; i < input.length; i++) {
                if(input[i] != ' ') {
                    index = Arrays.asList(russian).indexOf(input[i]);
                    output += codeMorse[index] + " ";
                }
            }

            textArea.setText(output);
            button.setText("Конвертировано!");
        }
    });

//数组

    char[] russian = new char[]{'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И',
                            'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С',
                            'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ы', 'Ь',//41
                            'Э', 'Ю', 'Я', '1', '2', '3', '4', '5', '6', '7',
                            '8', '9', '0' };

String[] codeMorse = new String[] { "*–", "–***", "*––", "––*",
                                    "–**", "*", "***–", "––**",
                                    "**", "*–––", "–*–", "*–**", //41
                                    "––", "–*", "–––", "*––*",
                                    "*–*", "***", "–", "**–",
                                    "**–*", "****", "–*–*",
                                    "–––*", "––––", "−−*−",
                                    "−*−−", "−**−", "**−**",
                                    "**−−", "*−*−", "*−−−−",
                                    "**−−−", "***−−", "****−",
                                    "*****", "−****", "−−***",
                                    "−−−**", "−−−−*", "−−−−−" };

//输入值为“привет”

此代码抛出 java.lang.ArrayIndexOutOfBoundsException: -1 异常。两个数组长度相同。我认为它是由于 indexOf 而引发的,但我不知道如何更改它。

【问题讨论】:

  • 这表示input[i] 不在russian 数组中。你没有表现出两者的价值,所以很难说问题是什么。
  • 但它在..(
  • 要么 Java 是反复无常的,是在骗你;或者真的不是。请显示russian 数组的定义。我的猜测是russianchar[](在这种情况下Arrays.asList(russian)List&lt;char[]&gt;,它从不包含char;或者它是String[],在这种情况下它不包含char 要么。
  • 你能发布完整的堆栈日志吗?
  • 您应该编辑 russian 数组和堆栈跟踪进入问题本身,而不是将它们放在 cmets 中。

标签: java arrays string indexof


【解决方案1】:

您的角色可能不在您的 russian 数组中。

您使用了toUpperCase(),它没有指定Locale。一定要指定一个Locale,比如new Locale("ru"),否则它可能会错误地转换你的小写字母。

非字母数字字符也会引起问题。

试试这样的:

private static final Locale RUSSIAN = new Locale("ru");

private static final String russian = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬ" + // 41
                                      "ЭЮЯ1234567890";

button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            String output = "";
            char[] input = textArea.getText().toUpperCase(RUSSIAN).toCharArray();
            int index;

            for (int i = 0; i < input.length; i++) {
                index = russian.indexOf(input[i]);
                System.out.printf("char: %c, index: %d%n", input[i], index);
                if (index >= 0)
                    output += codeMorse[index] + " ";
            }

            textArea.setText(output);
            button.setText("Конвертировано!");
        }
    });

char[] 转换为String 以删除Arrays.asList()...

【讨论】:

  • 我试了一下,没有抛出异常但是textArea是空的。
  • В(input[i]) -1(index)
  • В -1 В -1 О -1 Д -1 И -1 Т -1 Е -1 Т -1 Е -1 К -1 С -1 Т -1 。 -1 。 -1
  • 无论写什么,索引都等于-1
  • 原因可能是,char[] 是一个Object,而asList() 将其视为单个Object,返回一个由该单个对象组成的list...
【解决方案2】:
for (int i = 0; i < input.length - 1; i++) {
                if(input[i] != ' ') {
                    index = Arrays.asList(russian).indexOf(input[i]);
                    output += codeMorse[index] + " ";
                }
            }

您只需迭代直到length-1

【讨论】:

  • 同样的情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 2019-12-07
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
相关资源
最近更新 更多