2016-01-22 53 views
0

用户将输入一个字符串,程序应该识别整数。 如果用户输入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]); 
     } 
    } 
} 
+0

你”用空格替换非数字字符,然后将结果拆分为空格字符。它吐出的数组将会有一堆空的元素作为结果...在获得数字之前,仍然需要迭代的元素。 – JonK

回答

0

而是关于修改字符串浪费时间(CPU资源),只需搜索你想要的东西:

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

它现在正在工作。谢谢!我不知道存在 – Meryel

+0

我有一个问题。如果我使用分隔符怎么办?例如,我有一串'm^ar y^ear',我希望它分别输出'm','ar','y'和'ear',我该怎么做呢? – Meryel

+0

我发现我只是要改变模式为'[a-zA-Z] +' – Meryel

1

您正在用空格替换每个非数字字符。您需要用""替换它,以便没有多余的空格。然后你在空间分裂,你会得到期望的结果。此外,还需要使用[^0-9\\s]来保留数字之间的空格,以便空格不会被""(空字符串)替代。

替换:

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

有:

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

@JonK做到了。感谢您的建议。 – Atri

+0

好多了,+1 – JonK

+0

既然'split()'只在空间中,为什么要保留所有*空格*字符?它应该是'[^ 0-9]',你也应该调用'trim()'来防止从split()分配的空白值,并且分割应该在多个空格上,即'split(“+ “)'。更少的是一个不完整的答案。 – Andreas