2012-08-27 117 views
1

我想檢查一個字符串中是否存在一個數字範圍 有沒有比這更優雅的方法?檢查字符串中的int範圍的Java檢查

if (ccnumeric.contains("51") 
    || ccnumeric.contains("52") 
    || ccnumeric.contains("53") 
    || ccnumeric.contains("54") 
    || ccnumeric.contains("55")) 

我想不出任何滿足這個的方法,因爲我正在檢查字符串中的int範圍。

回答

6

你可以使用一個簡單的正則表達式:5[12345]{1}尋找一個5後緊跟一個1, 2,3,4或5:

String s = "55"; 
Pattern p = Pattern.compile("5[12345]{1}"); 
if (p.matcher(s).find()) { 
    System.out.println("Found"); 
} else { 
    System.out.println("Not Found"); 
} 
+0

+1,但你可以使用'Matcher.find'而不是'* .bla。*'。 – dacwe

+0

@dacwe好點 - 編輯。 – assylias

+0

'[1-5]'而不是'[12345]'如何? – maba

1

也許你可以嘗試正則表達式。

例如

Pattern.matches(".*5[1-5].*", ccnumeric); 

編輯: 要查找所有數字的字符串:

List<Integer> allMatches = new ArrayList<Integer>(); 
Matcher m = Pattern.compile("(\\d+)").matcher(ccnumeric); 
while (m.find()) { 
    allMatches.add(Integer.parse(m.group())); 
} 
+0

+1但是,如果範圍從29到41,則工作得不太好。 – Thilo

0

您的問題有點含糊,例如字符串「541」,1(541),3(5,4,1),6(5,4,1,54,41,541)中有多少個數字?取決於你如何定義你的regexes會有相當大的變化。如果你的答案是1,那麼解決方案非常簡單,就是貪婪搜索所有數字,其長度與你的最小值相同並小於或等於你的最大值(然後可以根據最小值和最大值解析匹配和過濾) ...如果其他人之一,那麼你的解決方案會更復雜一點,你基本上將不得不創建一個滑動窗口來評估字符串中所有可能的組合。

+0

我想我的代碼解釋說,但無論如何它是51-55簡單隻有兩個數字 – JackyBoi

0

我認爲你的問題ambiguously phrased ...你是否希望檢查輸入字符串是否包含範圍51-55內的數字? (您的書面文字似乎暗示了這一點)在這種情況下,字符串「512是兩個冪」將不會匹配,因爲它不包含數字51.

或者您是否希望檢查字符串包含字符序列51,52,53,54或55? (你的代碼似乎暗示了這一點)在這種情況下,字符串「512是2的冪」將是匹配的,因爲它包含字符序列51.

如果第一個選項是這種情況, ð需要這樣的東西:

Pattern p = Pattern.compile("(^|[^\\d])5[1-5]($|[^\\d])"); 
if (p.matcher(inputString).find()) { 
    //The inputString contains the number you seek 
} 

從本質上講,這是什麼東西做的是尋找

  • 一個字符序列51-55
  • 由字符串任初preceeded,或由非數字字符
  • 後跟字符串末尾或非數字字符