【问题标题】:How to enter characters into a string array?如何在字符串数组中输入字符?
【发布时间】:2017-12-22 22:06:12
【问题描述】:

我正在尝试使用 for 循环将字符 a-z 输入到字符串数组中,但是我没有太多运气将字符转换为字符串值,因此它们实际上会进入字符串数组。我不断得到空值作为我的输出。谁能提供一些关于如何将字符放入字符串数组的提示? 这是我到目前为止所拥有的:

  String[] letters = new String[26];
  for (char ch = 'a'; ch <= 'z'; ch++)
  {
     int i = 0;
     letters[i] = String.valueOf(ch);
     i++;
  }
  System.out.println(Arrays.toString(letters));

【问题讨论】:

  • int i = 0;移到循环外

标签: java arrays string for-loop character


【解决方案1】:
String[] letters = new String[26];
int i = 0;
for (char ch = 'a'; ch <= 'z'; ch++)
{
   letters[i] = String.valueOf(ch);
   i++;
 }
System.out.println(Arrays.toString(letters));

试试这个。 i=0 应该在循环之外。

【讨论】:

    【解决方案2】:

    像 Eran 所说的将 int i = 0; 移到循环之外,或者只是不使用另一个计数器而是通过序数字符表示来确定索引:

    String[] letters = new String[26];
    for (char ch = 'a'; ch <= 'z'; ch++) {
        int index = (int) ch - 97;
        letters[index] = String.valueOf(ch);
    }
    System.out.println(Arrays.toString(letters));
    

    此外,您不必使用另一个局部变量,当然可以使用letters[(int) ch - 97] = ...

    【讨论】:

      【解决方案3】:

      您每次插入字母[0],将变量 i 保留在循环之外。

      String[] letters = new String[26];
        int i = 0;
        for (char ch = 'a'; ch <= 'z'; ch++)
        {
           letters[i++] = String.valueOf(ch);
        }
        System.out.println(Arrays.toString(letters));
      

      【讨论】:

        【解决方案4】:
        for (char ch = 'a'; ch <= 'z'; ch++){
             int i = 0;
             letters[i] = String.valueOf(ch);
             i++;
        }
        

        您需要了解它的作用:在每次迭代中,您都将变量 i 初始化为 0,因此您永远不会在字母以外的其他地方书写[0]

        你只需要将它设置为0,然后递增它,所以只需将指令放在循环之前


        另一种简单的方法是:

        char[] letters = "abcdefghijklmnopqrstuvwxyz".toCharArray();
        

        【讨论】:

        • 但她/他想要一个字符串数组而不是字符 ;)
        【解决方案5】:

        对于您的特定目的,使用 Java 8 Streams,您甚至不需要循环。

        String[] letters = IntStream.rangeClosed('a', 'z').mapToObj(i -> Character.toString((char)i)).toArray(String[]::new);
        System.out.println(Arrays.toString(letters));
        

        分解:

        • IntStream.rangeClosed(int, int) 从第一个 int 到第二个 ints 中生成 Stream,包括两个端点。我们使用它是因为没有 CharStream 类(出于某种原因),但我们仍然可以使用 chars 'a''z',它们将隐式转换为它们的 int 值。
        • mapToObj 接受一个函数,它将Stream 的每个int 转换为一个对象。这里有点乱,因为没有从intString 的单步转换,我们首先需要将int 解释为字符值。因此,我们将每个int(命名为i)转换为char,然后将其包装在从charString 的转换中:i -&gt; Character.toString((char)i)。这会给我们留下一个Stream&lt;String&gt;
        • 现在,根据您的问题,我们希望输出为 String[]Stream 有一个 toArray 方法,但这会给我们带来烦人的 Object[] 结果。相反,我们将提供我们想要用来构建数组的方法。我们不想要任何花哨的东西,所以我们只使用String 数组的标准初始化器:toArray(String[]::new)

        之后,letters 将等于Strings 的数组,每个数组依次是从az 的一个字母。

        如果您无法访问 Java 8 或只是不喜欢上述解决方案,这里是您的上述代码的简化版本,无需索引:

        String[] letters = new String[26];
        for (char c = 'a'; c <= 'z'; c++) letters[c - 'a'] = Character.toString(c);
        System.out.println(Arrays.toString(letters));
        

        在 Java 中,chars 可以被视为ints,因为在表面之下,它们都存储为数字。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-20
          • 1970-01-01
          • 1970-01-01
          • 2020-07-28
          • 1970-01-01
          • 2021-07-07
          • 1970-01-01
          相关资源
          最近更新 更多