首页 > 解决方案 > 输出中的 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);
                   }
   }
}

标签: javaarraysstring

解决方案


问题是您没有检查空格字符。检查如下:

if (a1[i] >= 'A' && a1[i] <= 'Z' || a1[i] == ' ')

您的代码的另一个问题是在每次迭代中更改countto1和的值,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]+

  1. A-Za-z用于字母。
  2. \\s是为了空间。
  3. +结尾表示允许出现[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

推荐阅读