如何让我的程序逐个字符地筛选用户输入(使用 Scanner 库)?
How do I make my porgram sift through a users input (using the Scanner library) character-by-character?
我正在为一所高中写一个小程序 class,想要获取用户的输入(例如:"Hello"),将其分成单独的字符("hello" -- > "h","e","l","l","o"), 然后将字符在字母表中移动一个位置 ("Hello" -- > "Ifmmp")。有没有一种简单的方法可以使用 java 来做到这一点?
您可以使用带有空分隔符的 Scanner
来检索字符 :
String in = "abc";
Scanner s = new Scanner(in);
s.useDelimiter("");
while (s.hasNext()) {
System.out.println(s.next());
}
您需要将字符串转换为字符数组,然后遍历它并递增每个字符。看下面的post。
String to char array Java
首先要意识到的是 java 中的 char
类型(表示单个字符)被视为数字(您可以查找 ASCII table常规字符的数值)。
所以这个过程将遍历原始 String
中的所有字符,并为每个字符加 1。如果将这些全部添加到第二个 String
中,那么第二个将包含所有移动了一步的字符。
String originalString = "hello";
// Use a StringBuilder to save all the characters
StringBuilder builder = new StringBuilder();
for (char c : originalString.toCharArray()) {
// Add 1 to each character and append it
builder.append((char) (c + 1));
}
// Now the builder contains the String with the shifted values
System.out.println(builder);
您甚至不需要扫描器来检查字符串。不过,您可以使用扫描仪来获取用户输入。然后,您只需逐个查看 String char 并对其进行操作。但要注意:本例中,当char为"z"或"Z"时,会被改成错误的char。所以你必须适当地处理 ascii-codes:
char[] chars = "abc".toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + 1);
}
String s = new String(chars);
System.out.println(s);
打印出来:
bcd
简介
我们将像往常一样使用 Scanner
来扫描使用 nextLine
的用户输入。检索到用户输入后,我们会将其转换为 char
数组,并检查每个 char
与包含在字母表数组中的 char
。
如果结果显示输入 String
包含一个数字——该符号将被替换为 a
——如果您不希望出现这种情况,我相信您会想出如何自行更改。
实施
以下是我们要做的事情:
// Scanner to scan for user input
// Array of ‘char’s containing entire alphabet
Scanner scanner = new Scanner(System.in);
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
char[] input = scanner.nextLine().toCharArray();
// Go over chars inside input
for(int i = 0; i < input.length; i ++)
{
char c = input[i];
// Go over alphabet in search for corresponding char
// As ‘t + 1’ will generate an error if ‘t == alphabet.length - 1’
// we do not go over that—instead we cover that after the loop
for(int t = 0; t < alphabet.length - 1; t ++)
if(c == alphabet[t])
{
input[i] = alphabet[t + 1];
break;
}
// If alphabet ‘t’ was equal to ‘alphabet.length - 1’ or the symbol
// was not located by the alphabet—say input contained a number
if(c == input[i])
input[i] = alphabet[0];
}
// Print out result
System.out.println("Input is: " + new String(input));
// Close scanner
scanner.close();
这仅适用于 lower case 个字母。但是,检查大写字母也不会比创建另一个包含大写字母的 char
字母数组更远。
如果您想让实现稍微更具可读性,我可以建议您将“遍历字母表”放在一个单独的方法中吗?
此外
实施相当简单,但我相信您可以在此基础上进行构建!
我正在为一所高中写一个小程序 class,想要获取用户的输入(例如:"Hello"),将其分成单独的字符("hello" -- > "h","e","l","l","o"), 然后将字符在字母表中移动一个位置 ("Hello" -- > "Ifmmp")。有没有一种简单的方法可以使用 java 来做到这一点?
您可以使用带有空分隔符的 Scanner
来检索字符 :
String in = "abc";
Scanner s = new Scanner(in);
s.useDelimiter("");
while (s.hasNext()) {
System.out.println(s.next());
}
您需要将字符串转换为字符数组,然后遍历它并递增每个字符。看下面的post。 String to char array Java
首先要意识到的是 java 中的 char
类型(表示单个字符)被视为数字(您可以查找 ASCII table常规字符的数值)。
所以这个过程将遍历原始 String
中的所有字符,并为每个字符加 1。如果将这些全部添加到第二个 String
中,那么第二个将包含所有移动了一步的字符。
String originalString = "hello";
// Use a StringBuilder to save all the characters
StringBuilder builder = new StringBuilder();
for (char c : originalString.toCharArray()) {
// Add 1 to each character and append it
builder.append((char) (c + 1));
}
// Now the builder contains the String with the shifted values
System.out.println(builder);
您甚至不需要扫描器来检查字符串。不过,您可以使用扫描仪来获取用户输入。然后,您只需逐个查看 String char 并对其进行操作。但要注意:本例中,当char为"z"或"Z"时,会被改成错误的char。所以你必须适当地处理 ascii-codes:
char[] chars = "abc".toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = (char) (chars[i] + 1);
}
String s = new String(chars);
System.out.println(s);
打印出来:
bcd
简介
我们将像往常一样使用 Scanner
来扫描使用 nextLine
的用户输入。检索到用户输入后,我们会将其转换为 char
数组,并检查每个 char
与包含在字母表数组中的 char
。
如果结果显示输入 String
包含一个数字——该符号将被替换为 a
——如果您不希望出现这种情况,我相信您会想出如何自行更改。
实施
以下是我们要做的事情:
// Scanner to scan for user input
// Array of ‘char’s containing entire alphabet
Scanner scanner = new Scanner(System.in);
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
char[] input = scanner.nextLine().toCharArray();
// Go over chars inside input
for(int i = 0; i < input.length; i ++)
{
char c = input[i];
// Go over alphabet in search for corresponding char
// As ‘t + 1’ will generate an error if ‘t == alphabet.length - 1’
// we do not go over that—instead we cover that after the loop
for(int t = 0; t < alphabet.length - 1; t ++)
if(c == alphabet[t])
{
input[i] = alphabet[t + 1];
break;
}
// If alphabet ‘t’ was equal to ‘alphabet.length - 1’ or the symbol
// was not located by the alphabet—say input contained a number
if(c == input[i])
input[i] = alphabet[0];
}
// Print out result
System.out.println("Input is: " + new String(input));
// Close scanner
scanner.close();
这仅适用于 lower case 个字母。但是,检查大写字母也不会比创建另一个包含大写字母的 char
字母数组更远。
如果您想让实现稍微更具可读性,我可以建议您将“遍历字母表”放在一个单独的方法中吗?
此外
实施相当简单,但我相信您可以在此基础上进行构建!