2017-11-02 11 views
-3

文字列に「1 22a 34 718 u3ou1」と指定します。目的は、この場合には、それは私はこのようにそれを試して1と34と718だだけINT値を見つけることである:文字列の整数値のみを取得し、2番目の最大値を見つける

String str = "1 22a 34 718 u3ou1.";  
    str = str.replaceAll("[^-?0-9]+", "*"); 
    System.out.println(Arrays.asList(str.trim())); 

本の出力である:[1 22 34 718 3 1]。 出力は[1 34 718]でなければなりません。 誰かがバグを見つけられますか?

+0

数値以外の数値を数値に変換しないでください。 – azurefrog

+0

文字+数字以外のすべての部分は無視する必要があります – progress190

+0

しかし、あなたはそれをしていません。あなたは、文字を含む部分を取り出して文字を取り除くので、「本当の」数字と無視すべきものを区別することはできません。 – azurefrog

答えて

0

より良い利用スプリット、私は信じている:

private List<int> intArray(string str) 
{ 
data = str.Split(''); 
var result = new List<int>(); 
for (var item in data) 
{ 
    int number=0; 
    if (int.TryParse(item,out number)) 
    { 
     result.Add(number); 
    } 
} 

return result 
} 

はWARNING: 1.チェックしていない/コード

2をテストした..私はただ一方で、質問はJavaでいた実現しています私のコードはCです#

+0

ですが、これはリストなしでは動作しませんか? – progress190

+0

@ progress190、はい、それはあなたが好むデータ型に変換するためにあなたに任せます – apomene

0

区切り記号として空白スペースを使って分割した後で、要素を解析しようとすることができます:

String str = "1 22a 34 718 u3ou1."; 

String[] split = str.split(" +"); 

    List<String> list = new ArrayList<>(); 

    for (String s : split) { 
     try { 
      Integer.parseInt(s); 
      list.add(s); 
     } catch (NumberFormatException e) { 

      /** 
      * 
      *do Nothing 
      * 
      * */ 
     } 
    } 
    System.out.println(list); 
関連する問題