有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java单独输出字符串中的整数,然后再输出

用户将输入一个字符串,程序应识别整数。 如果用户输入Hello12 3,它应该输出:

The integral numbers are:
id1     12
id2     3

但在我的代码中,它输出

The integral numbers are:
int1     
int2     
int3     
int4     
int5     
int6     12
int7     3

我该怎么修? 我的代码:

import java.util.*;
public class LexicalAnalyzer {
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        String str;
        int j=0;

        System.out.println("Lexical Analyzer for Algebraic Expressions\n");
        System.out.print("Enter the String: ");
        str = input.nextLine();
        System.out.println("String length is: "+str.length());
        System.out.println("\nThe integral numbers are: \n");
        String intNum = str.replaceAll("[^0-9]", " ");
        String[] intSplit = intNum.split(" ");
        for(int i=0;i<intSplit.length;i++){
            System.out.println("int"+(i+1)+"     "+intSplit[i]);
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    不要在修改字符串上浪费时间(CPU资源),只需搜索所需内容:

    Matcher m = Pattern.compile("[0-9]+").matcher(str);
    for (int i = 1; m.find(); i++)
        System.out.println("int" + i + "     " + m.group());
    
  2. # 2 楼答案

    您正在用空格替换每个非数字字符。您需要用""替换它,这样就没有多余的空间了。然后在空间上进行分割,将得到所需的结果。此外,还需要使用[^0-9\\s]来保留数字之间的空格,以便空格不会被""(空字符串)替换

    替换:

    String intNum = str.replaceAll("[^0-9]", " ");
    

    与:

    String intNum = str.replaceAll("[^0-9\\s]", "");