2016-09-07 43 views
0

我想檢查在我的字符串中是否有letter後跟colon正則表達式去驅動器號

如果是這樣,剝離兩者。

F:/users/mark/ =>/users/mark/

這是我到目前爲止有:

if(Pattern.matches("[a-zA-Z]:", path)) 
     path = path.substring(2); 

有沒有人對如何做到這更好的主意嗎?

+0

使用以下「^ [a-zA-Z]:」,這意味着您以驅動器號和冒號開頭。 – SMA

+1

'path = path.replaceFirst(「^ [a-zA-Z]:」,「」);' – anubhava

+0

'matches'不會檢查某個子字符串是否可以匹配正則表達式,但是如果* entire *字符串匹配它。你需要在正則表達式的末尾添加'。*',以便匹配其他字符串,或者使用'Matcher.find()'代替。 – Pshemo

回答

2

您可以使用:

path = path.replaceAll("^[a-zA-Z]:", ""); 
+1

@Angelina我幾乎可以肯定你把正則表達式放到'matches'中。別。只需使用'path = path.replaceFirst(「^ [a-zA-Z]:」,「」);' –

1

您可以使用正則表達式^[^\/]*(.*)和捕捉到的第一組。

sourceString = sourceString.replaceAll("^[^\\/]*(.*)", "$1"); 

DEMO

輸入

F:/users/mark/ 

匹配信息

MATCH 1 
1. [2-14] `/users/mark/` 
1

您可以用簡單的字符串方法實現你的目標:

String path = "F:/some/path"; 
if (path.length() > 1 && Character.isLetter(path.charAt(0)) && path.charAt(1) == ':') { 
    path = path.substring(2); 
    System.out.println(path); // this is for demo 
} 

參見Java demo

其中:

  • path.length() > 1 - 如果path長度超過1
  • && Character.isLetter(path.charAt(0)) - 和所述第一字符是字母
  • && path.charAt(1) == ':' - 和第二炭是:
  • path.substring(2) - 使用從第二個索引開始的子串。

是的,不要忘記把結果賦給變量。