Java 如何拆分用户输入的字符串

Java 如何拆分用户输入的字符串,java,string,split,parseint,Java,String,Split,Parseint,这是我们在Java编程中的作业。我想知道如何按用户拆分输入的字符串。 程序将要求用户以MM/dd格式输入其出生日期。之后,我希望应用程序分割日期(分隔符是斜杠)。加上号码。并根据数字之和输出黄道十二宫 预期结果: Please enter your date of birth (MM/dd): 01/06 This is the mmdd value: 106 Result: Capricorn 但我不会用以下代码得到这个结果: public static void main(String[]

这是我们在Java编程中的作业。我想知道如何按用户拆分输入的字符串。
程序将要求用户以
MM/dd
格式输入其出生日期。之后,我希望应用程序分割日期(分隔符是斜杠)。加上号码。并根据数字之和输出黄道十二宫

预期结果:

Please enter your date of birth (MM/dd): 01/06
This is the mmdd value: 106
Result: Capricorn
但我不会用以下代码得到这个结果:

public static void main(String[] args) {

    Scanner scan = new Scanner (System.in);
    int mmdd;
    int a;
    int b;

   System.out.print("Please enter your date of birth(MM/dd): ");
   String stringdate = scan.next();

   a = Integer.parseInt(stringdate.split("/") [0]);
   b = Integer.parseInt(stringdate.split("/") [1]);
   mmdd = a + b;

   System.out.println("This is the mmdd value: " + mmdd);

   System.out.print("Result: ");
     if (mmdd >= 321 && mmdd <= 419) {
         System.out.println("ARIES");
     } else if (mmdd >= 420 && mmdd <= 520) {
         System.out.println("TAURUS");
     } else if (mmdd >= 521 && mmdd <= 620) {
         System.out.println("GEMINI");
     } else if (mmdd >= 621 && mmdd <= 722) {
         System.out.println("CANCER");
     } else if (mmdd >= 723 && mmdd <= 822) {
         System.out.println("LEO");
     } else if (mmdd >= 823 && mmdd <= 922) {
         System.out.println("VIRGO");
     } else if (mmdd >= 923 && mmdd <= 1022) {
         System.out.println("LIBRA");
     } else if (mmdd >= 1023 && mmdd <= 1121) {
         System.out.println("SCORPIO");
     } else if (mmdd >= 1122 && mmdd <= 1221) {
         System.out.println("SAGITTARIUS");
     } else if ((mmdd >= 1222 && mmdd <= 1231) || (mmdd >= 11 && mmdd <= 119)) {
         System.out.println("CAPRICORN");
     } else if (mmdd >= 120 && mmdd <= 218) {
         System.out.println("AQUARIUS");
     } else if (mmdd >= 219 && mmdd <= 320) {
         System.out.println("PISCES");
     }
}
publicstaticvoidmain(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
int-mmdd;
INTA;
int b;
系统输出打印(“请输入您的出生日期(MM/dd):”;
String stringdate=scan.next();
a=Integer.parseInt(stringdate.split(“/”[0]);
b=Integer.parseInt(stringdate.split(“/”[1]);
mmdd=a+b;
System.out.println(“这是mmdd值:“+mmdd”);
系统输出打印(“结果:”);
如果(mmdd>=321&&mmdd=420&&mmdd=521&&mmdd=621&&mmdd=723&&mmdd=823&&mmdd=923&&mmdd=1023&&mmdd=1122&&mmdd=1222&&mmdd=11&&mmdd=120&&mmdd=219&&mmdd
a=Integer.parseInt(stringdate.split(“/”[0])

b=Integer.parseInt(stringdate.split(“/”[1]);
为您提供
6

所以事实上你是求和
1+6
,得到
7
,而不是
106

相反,您可以使用:

String stringdate = scan.next();
stringdate = stringdate.replaceAll("[^\\d]+", "");//remove all non digits

mmdd = Integer.parseInt(stringdate);//then parse the result
如果输入
01/06
,则
mmdd
返回
106
而不是
7
a=Integer.parseInt(stringdate.split(“/”[0]);
给出
1

b=Integer.parseInt(stringdate.split(“/”[1]);
为您提供
6

所以事实上你是求和
1+6
,得到
7
,而不是
106

相反,您可以使用:

String stringdate = scan.next();
stringdate = stringdate.replaceAll("[^\\d]+", "");//remove all non digits

mmdd = Integer.parseInt(stringdate);//then parse the result

如果输入
01/06
,则
mmdd
返回
106
,而不是
7

,则将整数的
求和
运算符与字符串的
concat
运算符混淆。 它们看起来可能相同(
+
),但行为却截然不同


在您的特定情况下:如果您希望代码按原样工作,则应将
a
b
保留为字符串(而不是将它们解析为整数),然后将
mmdd=a+b
字符串解析为整数。

您将整数的
sum
运算符与字符串的
concat
运算符混淆。 它们看起来可能相同(
+
),但行为却截然不同


在您的特定情况下:如果您希望代码按原样工作,您应该将
a
b
保留为字符串(而不是将它们解析为整数),然后将
mmdd=a+b
字符串解析为整数。

您可以将代码重新格式化为

公共类主{
公共静态void main(字符串[]args){
LocalDate parse=LocalDate.parse(“11/15”,模式的DateTimeFormatter.of(“MM/dd”);
//月*100完成您的功能(01/06)=106
int sum=parse.getMonthValue()*100+parse.getDayOfMonth();
系统输出打印项数(总和);
System.out.println(生肖值fromsum(sum));
}
黄道带{
白羊座,
金牛座,
双子座,
巨蟹座
狮子座,
处女座,
天秤座,
天蝎座
射手座,
摩羯座,
水瓶座,
双鱼座;
静态黄道带值FromSum(整数mmdd){

如果(mmdd>=321&&mmdd=420&&mmdd=521&&mmdd=621&&mmdd=723&&mmdd=923&&mmdd=1023&&mmdd=1122&&mmdd=1222&&mmdd=11&&mmdd=120&&mmdd=219&&mmdd代码可以重新格式化为

公共类主{
公共静态void main(字符串[]args){
LocalDate parse=LocalDate.parse(“11/15”,模式的DateTimeFormatter.of(“MM/dd”);
//月*100完成您的功能(01/06)=106
int sum=parse.getMonthValue()*100+parse.getDayOfMonth();
系统输出打印项数(总和);
System.out.println(生肖值fromsum(sum));
}
黄道带{
白羊座,
金牛座,
双子座,
巨蟹座
狮子座,
处女座,
天秤座,
天蝎座
射手座,
摩羯座,
水瓶座,
双鱼座;
静态黄道带值FromSum(整数mmdd){

如果(mmdd>=321&&mmdd=420&&mmdd=521&&mmdd=621&&mmdd=723&&mmdd=923&&mmdd=1023&&mmdd=1122&&mmdd=1222&&mmdd=11&&mmdd=120&&mmdd=219&&mmdd),您会得到什么错误?您会得到什么错误?