0

String.startsWith()ある種のワイルドカードが必要なJavaの簡単な質問。

http://リンクがまたはローカル ドライブ (など)c:\で始まるかどうかを確認する必要がありますd:\が、ドライブ文字がわかりません。

だから私は次のようなものが必要だと思うmyString.startsWith("?:\\")

何か案は?

乾杯

乾杯しますが、これを少し構築する必要があると思います。

私は今、対応する必要があります

1.http://
2.ftp://
3.file:///
4.c:\
5.\\

やり過ぎですが、全員を確実に捕まえたいと思っています。

私は持っている

if(!link.toLowerCase().matches("^[a-z]+:[\\/]+.*")) {

これは、任意の文字または文字の後に : (http:、ftp:、C: など)が続く場合に機能し、 1 ~ 4 をカバーしますが、\\ には対応できません。

私が得ることができる最も近いものはこれです(これは機能しますが、regExで取得するといいでしょう)。

if(!link.toLowerCase().startsWith("\\") && !link.toLowerCase().matches("^[a-z]+:[\\/]+.*")) {
4

3 に答える 3

5

でサポートされていない正規表現が必要になりますstartsWith:

^[a-zA-Z]:\\\\.*

^   ^     ^    ^
|   |     |    |
|   |     |    everything is accepted after the drive letter
|   |    the backslash (must be escaped in regex and in string itself)
|  a letter between A-Z (upper and lowercase)
start of the line

次に、使用できますyourString.matches("^[a-zA-Z]:\\\\")

于 2013-05-29T15:04:02.660 に答える
2

これには正規表現を使用する必要があります。

Pattern p = Pattern.compile("^(http|[a-z]):");
Matcher m = p.matcher(str);
if(m.find()) {
   // do your stuff
}
于 2013-05-29T15:02:47.337 に答える
1
String toCheck = ... // your String
if (toCheck.startsWith("http://")) {
   // starts with http://
} else if (toCheck.matches("^[a-zA-Z]:\\\\.*$")) {
    // is a drive letter
} else {
    // neither http:// nor drive letter
}
于 2013-05-29T15:02:46.250 に答える