2012-12-06 44 views
1

我需要做的是檢查一個字符串,這是我迄今爲止上搜索一個字符串匹配正則表達式的幫助

System.out.print("Please enter a string of 1's and 0s :"); 
numLine = input.next(); 

if (numLine.matches("^101$")) { 
    System.out.print("A is true"); 
} else if (numLine.matches("^\\d[01]+101$ ")){ 
    System.out.print("B is true"); 
} else { 
    System.out.println("no"); 
} 

代碼的第一部分^ 101 $的作品,並打印出來A是真實的 對於B我想要做的只是接受1和0,並返回如果它在101 結束,我想在C開始時做101並接受多個1和0 和一個D在其中的任何地方,即使它的111000101000或其他東西都是101,但是我可以使用幫助(「^ 101 $」)語法與此

+0

你不需要用'^'和'$'來加'matches'。 – arshajii

+1

你打算在第二個正則表達式中使用\ d是什麼意思? – murgatroid99

+0

以及最初的想法是能夠採取字符串,並設置,但如果字符串是「101」它返回A,如果它的「0100101」它將返回B,「101001001」會得到C,並且「111000101000111」會返回D.同時拒絕一切,但1和0。 –

回答

2

你不需要^$matches(正如我在我的評論中所說)。下面是我看到它的方式:

B:"[01]+101"
C:"101[01]+"
d:"[01]*101[01]*"


回想X+意味着X一次或多次和意思是X零次或多次

而且(爲一個),如果要「匹配」只"101",你可能想簡單地使用equals代替,即numLine.equals("101")考慮。

1

你想要的四個正則表達式都非常相似:

精確匹配「101」(A),因爲你發現,使用101(如在評論中提到的,你不需要使用^$

要匹配任何以 「101」(B)結束時,使用[01]*101

要匹配任何開頭 「101」(C),使用101[01]*

要匹配任何包含「101」(D)的東西,請使用[01]*101[01]*

在所有情況下,[01]*意味着在集合{0,1}的任何字符的0或多個實例,因此,每個這些驗看101與串的剩餘部分的填寫適用僅01

0

我不確定你想要做什麼,但我明白你想要什麼正則表達式,所以我只是簡單地發表。

A - ^101$匹配101作爲整個字符串。

B - ^101匹配101在字符串的開頭。之後添加[10]*,包括01之後。 ^101[10]*

C - 101$匹配101在字符串的末尾。開始時加入[10]*^包括前面的01[10]*101$

D - 101匹配101任何地方。