2017-11-02 12 views
-3

주어진 문자열의 경우 : "1 22a 34 718 u3ou1." 목적은이 경우에는이 같은 그것을 시도 1, 34, 718이다 만 INT 값을 찾는 것이다 이러한문자열의 정수 값만 가져오고 두 번째 최대 값을 찾습니다.

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 
} 

:이 1. 확인하지 않았/코드

이 테스트 .. 난 그냥 반면, 문제는 자바이었다 실현 내 코드는 C#

+0

"22a"를 삭제하는 것입니다. 목록 없이는 작동하지 않습니까? – progress190

+0

@ progress190 예, 그렇습니다. 선호하는 데이터 형식 Ienumerable로 변환하려면 그대로 두십시오. – 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);