2014-01-17 2 views
0

코드는 기본적으로 abc123에서 abc246과 같이 두 배가됩니다. 이제 여기서 문제는 공백이나 구두점을 감지하지 못할 것이고 int i = Integer.parseInt (sentence); 라인에 대한 오류를 줄 것입니다. 어떤 아이디어? 감사합니다공백이나 구두점을 감지 할 수 없습니다

편집 :이 코드는 스캐너를 통해 사용자 입력 문장을 요구합니다.

 else 
     { 
      String woah = sentence; 
      sentence = sentence.replaceAll("\\D", ""); 
      int i = Integer.parseInt(sentence); 
      int j = i * 2 ; 
      woah = woah.replaceAll("" + i, "" + j); 
      System.out.println(woah); 
     } 
+2

"foo888"에 대한 원하는 결과는 무엇입니까? –

+0

foo1766이어야합니다. – user3201634

+0

"\\ D"란 무엇입니까? 당신이 우주라는 것을 의미한다면, 왜 ""라고 쓰는 것이 좋을까요? –

답변

-1

쉽게 접근 방식 : 정규 표현식 (\ "의 D")는 당신을 위해 작동하지 않는 이유

StringBuilder woah = new StringBuilder(); 
StringBuilder number = new StringBuilder(); 
for(int i = 0; i < sentence.length(); i++) { 
    char c = sentence.charAt(i); 

    if(Character.isDigit(c)) { 
     number.append(c); 
    } else { 
     woah.append(c); 
    } 

    woah.append(Integer.parseInt(number.toString()) * 2); 

    System.out.println(woah.toString()); 
} 
+0

이것은'sentence'가'foo888' 일 때'foo1766' 대신에'foo161616'을 출력합니다. – Hosch250

+0

죄송합니다. 원하시는 것을 오해하셨습니다. 내 대답을 편집했습니다. 요점은 정규식을 사용할 필요가 없다는 것입니다. – rjsang

0

이 있는지, 나를 위해 노력하지 않습니다. 또는 아래 정규 표현식에 하나의 샷을 줄 수 있습니다.

sentence = sentence.replaceAll("[^0-9]", ""); 
0

정규식은 실선이므로 모든 비 숫자 문자를 삭제해야합니다. 이 줄은 문자열에 숫자가없는 경우에만 예외를 throw합니다. 이것은 당신이 실수로 입력을했다고 믿게합니다.

Scanner.nextLine을 입력 하시겠습니까? 아니면 Scanner.next입니까? 구분 기호를 사용하지 않는 경우 전자를 사용해야합니다.

+0

오. 나의. 하나님. 너는 천재 야. 정말 고맙습니다. 편집 : 글쎄, 내가 다른 문제를 보았습니다. 내가 1woah1과 같은 다른 부분에 정수를 입력하면 출력은 입력과 동일하게 유지됩니다. – user3201634

+0

코드가 분리 된 정수를 차지하지 않습니다. '2woah2 '를 출력하고 싶습니까? 한 가지 제안은 해석 라인을'sentence.replaceAll ("\\ D", "");'로 대체하여 공백과 숫자 만 가질 수 있도록합니다. 그런 다음 문장을 자르십시오. 그런 다음이 정규식'.replaceAll ("\\ s +", "");을 통해 실행하면 여러 공백이 생기지 않습니다. 이제'sentence.split ("");'을 사용하여 분리하십시오. 이제 문자열 형태의 정수 배열을가집니다. 해당 배열을 반복하고 각 정수를 두 배로 늘릴 수 있습니다. 그런 다음 트릭은 원래의 문자열에 새로운 두배의 정수를 가져 오는 것입니다. – user3100783

관련 문제