java - 输出中的 Java 字符串连接错误
问题描述
我是Java的初学者,遇到了这个学校问题:
XYZ 门控居民区的权限要求其居民姓名数据应按以下格式存储-居民姓名他/她父亲的姓名。编写一个程序,将父亲的名字与居民的名字连接起来。名称应经过验证,在验证时名称应仅包含字母且允许使用空格。如果名称无效,则显示消息“无效名称”。如果是有效字符串,则将其转换为大写并打印
Sample Input 1:
Inmate's name:Aron
Inmate's father's name:Terby
Sample Output 1:
ARON TERBY
错误:每当我输入两个字母的囚犯姓名时,它都会打印出“无效输入”,例如 - Aron Kumar,否则对于单个单词字符串输入代码可以正常工作。
这是我写的代码:
Scanner sc=new Scanner(System.in);
System.out.println("Inmate's name:"); //if I enter 2 word string,output-"Invalid name1"//
String name=sc.nextLine();
System.out.println("Inmate's father's name:");
String fname=sc.nextLine();
String s3=name.toUpperCase();
String s4=fname.toUpperCase();
char[] a1= s3.toCharArray();
char[] a2= s4.toCharArray();
for(int i=0;i<a1.length;i++)
{
if(a1[i]>='A' && a1[i]<='Z')
count=1;
else {
System.out.print("Invalid name1");
count=0;
break; }
}
if(count==1)
{
for(int i=0;i<a2.length;i++)
{
if(a2[i]>='A' && a2[i]<='Z')
count=2;
else {
System.out.print("Invalid name");
break; }
}
}
if(count==2) {
System.out.print(s3+" "+s4);
}
}
}
解决方案
问题是您没有检查空格字符。检查如下:
if (a1[i] >= 'A' && a1[i] <= 'Z' || a1[i] == ' ')
您的代码的另一个问题是在每次迭代中更改count
to1
和的值,2
而在循环终止时应该更改它。下面给出的是更正后的代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int count = 0, i;
Scanner sc = new Scanner(System.in);
System.out.println("Inmate's name:");
String name = sc.nextLine();
System.out.println("Inmate's father's name:");
String fname = sc.nextLine();
String s3 = name.toUpperCase();
String s4 = fname.toUpperCase();
char[] a1 = s3.toCharArray();
char[] a2 = s4.toCharArray();
for (i = 0; i < a1.length; i++) {
if (!(a1[i] >= 'A' && a1[i] <= 'Z' || a1[i] == ' ')) {
System.out.print("Invalid name1");
count = 0;
break;
}
}
// If 'i' reached a1.length, it means no invalid character was found
if (i == a1.length) {
count = 1;
}
if (count == 1) {
for (i = 0; i < a2.length; i++) {
if (!(a2[i] >= 'A' && a2[i] <= 'Z' || a2[i] == ' ')) {
System.out.print("Invalid name");
break;
}
}
// If 'i' reached a2.length, it means no invalid character was found
if (i == a2.length) {
count = 2;
}
}
if (count == 2) {
System.out.print(s3 + " " + s4);
}
}
}
附加说明:
您可以使用正则表达式使代码更短,如下所示:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Inmate's name: ");
String name = sc.nextLine();
System.out.print("Inmate's father's name: ");
String fname = sc.nextLine();
if (name.matches("[A-Za-z\\s]+") && fname.matches(("[A-Za-z\\s]+"))) {
System.out.println(name.toUpperCase() + " " + fname.toUpperCase());
} else if (!name.matches("[A-Za-z\\s]+")) {
System.out.println("Inmate's name is invalid");
} else if (!fname.matches(("[A-Za-z\\s]+"))) {
System.out.println("Inmate's father's name is invalid");
}
}
}
正则表达式的解释[A-Za-z\\s]+
:
A-Za-z
用于字母。\\s
是为了空间。+
结尾表示允许出现[A-Za-z\\s]+
多次。
示例运行:
Inmate's name: Ram Kumar
Inmate's father's name: Raj Kumar
RAM KUMAR RAJ KUMAR
另一个示例运行:
Inmate's name: Ram5 Kumar
Inmate's father's name: Raj Kumar
Inmate's name is invalid
另一个示例运行:
Inmate's name: Ram Kumar
Inmate's father's name: Raj5 Kumar
Inmate's father's name is invalid
推荐阅读
- laravel-6 - 语法错误,意外的 'form' (T_STRING),期待 ')'
- powershell - 为什么在后台运行时工作脚本会失败?
- android - 如何在共享首选项中保存带有模型类的数组列表?
- c - 如何在 C 中的特定字符之后的字符串的其余部分
- jquery - 如何使用 Keyup 功能限制字母?
- oracle - Oracle-在函数中使用可选参数?
- android - 使用 Firebase 应用分发服务导致应用未安装错误
- java - 字符串出现按顺序
- c++ - 旧版 C++ 代码在 Windows 10 下不显示位图
- javascript - ES6解构获取嵌套对象属性