2010-05-21 3 views
0

나는 인터넷에서 파싱 될 s_Result이라는 문자열을 가지고있다. 형식은 "Distance: 2.8km (about 9 mins)" 일 수 있으며 f_Distance, m_DistanceUnit, f_timeEst, m_timeEstUnit 인 4 개의 변수가 있습니다.정규식을 사용하고 Android에서 변수에 결과를 할당하는 방법은 무엇입니까?

내 질문은 s_Result을 분석하고 2.8, km, 9, f_Distance, m_distanceUnit, f_timeEstm_timeEstUnitmins 각각 사용하여 정규 표현식을 할당하는 방법입니까?

RegEx Tester에서 "\d+(\.\d+)?"을 사용해 보았는데 그 결과 2 개가 발견되었습니다. 그러나 "\\d+(\\.\\d+)?"을 Android 코드에 사용하면 일치하는 항목이 없습니다.

어떤 문제가 발생할 수 있으십니까?

답변

6

그런가요?

String s_Result="Distance: 2.8km (about 9 mins)"; 

//Distance parsing 
Pattern p = Pattern.compile("Distance: (\\d+(\\.\\d+)?)(.*?)\\b"); 
Matcher m = p.matcher(s_Result); 
if(m.find()){ 
    MatchResult mr=m.toMatchResult(); 
    f_Distance=mr.group(1);//2.8 
    m_DistanceUnit=mr.group(3);//km 
} 

//Time parsing 
p = Pattern.compile("about (\\d+(\\.\\d+)?) (.*)\\b"); 
m = p.matcher(s_Result); 
if(m.find()){ 
    MatchResult mr=m.toMatchResult(); 
    f_timeEst=mr.group(1);//9 
    m_timeEstUnit=mr.group(3);//min 
} 

그리고 여기, 당신을위한 다른 옵션들보다 유연한 형식과 일치하는 :

String s_Result="Distance: 2.8km (about 9 mins)"; 
Pattern p = Pattern.compile("(\\d+(\\.\\d+)?) ?(\\w+?)\\b"); 
Matcher m = p.matcher(s_Result); 
while(m.find()){ 
    MatchResult mr=m.toMatchResult(); 
    String value=mr.group(1);//2.8 and 9 come here 
    String units=mr.group(3);//km and mins come here 
} 
+0

이것은 내가 원하는 것입니다 !!!! 어떻게 바보가''\ b "'를 사용하는 걸 까먹었 는가 ... 고맙습니다. ^^ – ChengYing

0

나는 정규식 테스터 "\d+(\.\d+)?"를 사용하여 시도하고 그 결과를 찾을 수 2 경기를 보여 주었다,하지만 난 안드로이드 코드에서 "\\d+(\\.\\d+)?"를 사용하는 경우, 그것은 어떤 경기를 보여주지!

아마 당신은 전체 문자열에 일치합니다 String#matches() 또는 Matcher#matches()을 사용했다. 정규식은 실제로 "^\\d+(\\.\\d+)?$"입니다. 대신 Matcher#find()을 사용하십시오.

String s = "Distance: 2.8km (about 9 mins)"; 
Matcher m = Pattern.compile("\\d+(\\.\\d+)?").matcher(s); 
while (m.find()) { 
    System.out.println(m.group(0)); // 2.8 and 9 
} 

그렇다면 파서 작성을 고려해 보셨습니까?

+0

답장을 보내 주셔서 감사합니다. 맞습니다. 저는 Matcher.matches()를 사용하고있었습니다. 그리고 코드가 잘 작동합니다! 파서를 작성하는 것을 고려하지만 몇 가지 문제가 있습니다. 큰 문제는's_Result'의 형식을 확신 할 수 없다는 것입니다. 내가 아는 전부는 숫자와 그 단위를 포함하는 가시 영역에 2 세트의 데이터가 존재해야한다는 것입니다. 번호 뒤에 숫자를 붙이는 방법을 알고 있습니까? 감사합니다. – ChengYing

0

그것은 자바에서 절대적으로 동일합니다.

실제로 Android 관련 질문의 대부분은 Android 자체와 관련이 없으며 일반적인 Java 프로그래밍과 관련되어 있습니다. 새로운 'Android'질문을 게시하기 전에보다 일반적인 질문을 검색하십시오.

관련 문제