2014-05-15 3 views
0

저는 StringBuilder를 가지고 있고 숫자와 다음 문자 (+, -, *, /)를 제외한 문자를 가져 오려고합니다.Java StringBuilder 원하지 않는 문자를 반환하십시오.

이 코드를 작성했습니다.

StringBuilder sb = new StringBuilder(" a + 5 v 5 + 6 + 7"); 
    String nieuw = trimOriginal(sb); 
    System.out.println(nieuw); 
    if(nieuw.matches("[a-zA-Z ]*\\d+.*")){ 
     System.out.println(nieuw); 

    }else { 
     System.out.println("contains illegal charters"); 
    } 

public static String trimOriginal(StringBuilder sb) { 
     return sb.toString().trim(); 
    } 

내가 또한 및 v.

누군가가 matches의 문제가 전체 문자열과 일치하려고 할 것입니다 나에게

+0

경우'에서 오는 hier'입니까? 또한, 쓰여진 것처럼, 코드는 좋아하지 않는 문자가있을 때 단순히 오류를 출력합니다 .. – merlin2011

+0

그 정규 표현식은'a + 5 v 5 + 6 + 7'과 일치합니까? – Holloway

답변

2
public static void main(String[] args) { 
    StringBuilder sb = new StringBuilder(" a + 5 v 5 + 6 + 7"); 
    String nieuw = trimOriginal(sb); 
    System.out.println(nieuw); 
    if (nieuw.matches("[^0-9+/*-]+")) { 
     System.out.println(nieuw); 

    } else { 
     System.out.println("contains illegal charters"); 
    } 
} 

public static String trimOriginal(StringBuilder sb) { 
    String buff = sb.toString(); 
    String[] split = buff.split("[0-9+/*-]+"); 
    StringBuilder b = new StringBuilder(); 
    for (String s : split) { 
     b.append(s); 
    } 
    return b.toString().trim(); 
} 

OUTPUT은

a v 
a v 
1

을 도울 수있는 인쇄 HIER를 원한다. 이와 같이 변경하면 다음과 같이 작동합니다.

StringBuilder sb = new StringBuilder(" a + 5 v 5 + 6 + 7"); 
    Pattern p = Pattern.compile("([^0-9 +*/-])"); 
    Matcher m = p.matcher(sb.toString()); 
    while(m.find()) 
    { 
     System.out.println(m.group(1)); 
    } 

수율 : a v.

관련 문제