【问题标题】: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));
【问题讨论】:
标签:
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 转换为一个对象。这里有点乱,因为没有从int 到String 的单步转换,我们首先需要将int 解释为字符值。因此,我们将每个int(命名为i)转换为char,然后将其包装在从char 到String 的转换中:i -> Character.toString((char)i)。这会给我们留下一个Stream<String>。
- 现在,根据您的问题,我们希望输出为
String[]。 Stream 有一个 toArray 方法,但这会给我们带来烦人的 Object[] 结果。相反,我们将提供我们想要用来构建数组的方法。我们不想要任何花哨的东西,所以我们只使用String 数组的标准初始化器:toArray(String[]::new)。
之后,letters 将等于Strings 的数组,每个数组依次是从a 到z 的一个字母。
如果您无法访问 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,因为在表面之下,它们都存储为数字。