java - 需要帮助检查 Java 中 If/else 语句中的空格
问题描述
我是学习java的新手,我正在为我的在线课程做一个项目,目前卡在其中的一部分。
编写一个程序来检查给定变量名的正确性。更具体地说,您的程序应指定用户输入的变量名称是否为:
- 非法(不允许有空格,必须以字母开头)
- 合法,但风格不佳(只能使用字母或数字)
- 好的
您不需要检查第二个单词、第三个单词等中的第一个字母是否为大写字母。
所以我的问题是,由于变量名中有空格是非法的,我需要检查用户输入的空格,如果有空格,则需要打印它是非法的。我还需要检查特殊符号(如 $%#),如果它在第一个字符之外的任何地方,让它打印它是合法但不正确的。
我觉得这非常简单,我只是想不通。
import java.util.Scanner;
public class IdentiferCheck
{
public static void main (String[] args)
{
Scanner in = new Scanner (System.in);
String variableName = "";
char ch = ' '; //temp holder
//Get User Input
System.out.println("This program checks the properness of a proposed Java variable name.");
System.out.println("Please enter a variable name (q to quit):");
variableName = in.nextLine();
//Check if variable name is proper
do
{
//Check if first char is lowercase
ch = variableName.charAt(0);
if (Character.isLetter(ch) && Character.isLowerCase(ch))
{
System.out.println("Good!");
}
else if (Character.isDigit(ch) && Character.isUpperCase(ch) && variableName.contains(" "))
{
System.out.println("Illegal!");
}
//Allow user to input another name or quit
System.out.println("Enter another name or press q to quit: ");
variableName = in.nextLine();
} while (!variableName.equalsIgnoreCase("q"));
}
}
解决方案
确保为您的任务阅读以下文档。值得注意的是,这些要求实际上并不符合 Java 变量名的实际要求。然而,这个任务最困难的部分是逻辑而不是脚本。我在下面为您编写了一个示例脚本:
后续字符可以是字母、数字、美元符号或下划线字符。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
import java.util.Scanner;
public class identifierCheck
{
public static void main(String[] args) {
String input = " ";
System.out.printf("type q to exit...\n");
while (input.charAt(0) != 'q' && input.length() == 1) // Note the length so that you can use q for starting variable names
{
input = requestLine();
if (checkValid(input))
{
System.out.printf("%s is legal...\n", input);
}
}
}
public static String requestLine()
{
Scanner cmd = new Scanner(System.in);
System.out.printf("Enter a variable name > ");
return cmd.nextLine();
}
public static boolean startsWithLetter(String input)
{
if (123 > (int)input.toLowerCase().charAt(0) && (int)input.toLowerCase().charAt(0) > 60)
{
return true;
}
else
{
return false;
}
}
public static boolean containsInvalid(String input)
{
if ((input.indexOf('$') != -1 || input.indexOf('_') != -1) && input.indexOf(' ') == -1)
{
System.out.printf("Using $ and/or _ in variable names is poor style...\n");
}
if (input.indexOf(' ') != -1) // Has a space in the string
{
return true;
}
else
{
return false;
}
}
public static boolean checkValid(String input)
{
if (!startsWithLetter(input))
{
System.out.printf("%s is illegal, must start with a letter (note: $ and _ are 'valid' to start variable names)...\n", input);
return false;
}
else if (containsInvalid(input))
{
System.out.printf("%s is illegal, it must not contain spaces...\n", input);
return false;
}
else
{
return true;
}
}
}
祝你的课程好运!Java 是一门极好的学习语言。
推荐阅读
- ruby-on-rails - 从 Faraday 使用端口 3000 调用 localhost
- sap - 在拥有 15 亿多条记录的大表上进行保留的最佳方法是什么?(SAP HANA SP12)
- ruby-on-rails - rspec .to receive(:method_name) 正确用法
- google-bigquery - 如何从大查询表中删除分区列?
- ruby-on-rails - 迁移生态系统的最佳解决方案
- python - DRF - 嵌套路由器 - 在 POST/PUT/PATCH 上创建/更新嵌套对象
- clang - clang 链接错误:无法找到库 -lclang_rt.builtins-arm.a
- oracle - 如何使用 oracle UTL_FILE 包在客户端文件系统上生成文件
- c# - C# 一个月的最后 3 个工作日
- symfony - symfony 验证器错误名称常量