2

"Varchar(10)、 、 、 、 Number(10)datetime(8)、 、varchar(17)のように一度に入力char(3)しました。

そこからテキストのみを抽出する必要があります。Javaでどうすればできますか?

input がVarchar(50)あり、 output を期待しているとしましょうVarchar

私はこれを試しましたが、うまくいきませんでした:

String line = "varchar(0)";
String pattern = "\\D{.*}";
// Create a Pattern object 
Pattern r = Pattern.compile(pattern);
// Now create matcher object. 
Matcher m = r.matcher(line); 
if (m.find( )) { 
  System.out.println("Found value: " + m.group(0) ); 
} else { 
  System.out.println("NO MATCH"); 
} 
4

4 に答える 4

2

あなたのグループの正規表現は一般的です

\w+\(\d+\)

最初の部分をキャプチャするには、グループにすることができます

(\w+)\(\d+\)

この機能を試してください:

private final Pattern TYPE_REGEX = Pattern.compile("(\\w+)\\(\\d+\\)");

public String extractType(String item) {
  Matcher matcher = TYPE_REGEX.matcher(item.trim());
  if(!matcher.matches())
    return null;
  return matcher.group(1);
}

景品:

データベース型の固定セットを扱っていると思うので、戻り値の型に型安全な列挙型を使用することもできます

private enum Type { VARCHAR, NUMBER, DATETIME, CHAR, ADD_ALL_OTHERS_THAT_APPLY }
private final Pattern TYPE_REGEX = Pattern.compile("(\\w+)\\(\\d+\\)");

public Type extractType(String item) {
  Matcher matcher = TYPE_REGEX.matcher(item.trim());
  if(!matcher.matches())
    return null;
  return Type.valueOf(matcher.group(1).toUpperCase());
}
于 2012-12-05T14:54:26.660 に答える
0

単一の出現のみを扱う場合、正規表現はやり過ぎだと思います。

例えば:

s = val.substring(1, val.indexOf ('('))

仕事をするでしょう。ただし、これは常に「(」が入力文字列の一部として表示されることを想定しています。

于 2012-12-05T14:51:13.867 に答える
0

この正規表現で入力文字列を分割できます"\\(\\d+\\),*"

サンプルコード:

String str = "Varchar(10), Number(10), datetime(8), varchar(17), char(3)";
String[] parts = str.split("\\(\\d+\\),*");

for (String part : parts)
    System.out.println(part.trim());

出力trim()(要素を印刷する前に呼び出されることに注意してください。):

Varchar
Number
datetime
varchar
char
于 2012-12-05T14:53:42.417 に答える
0
line.replaceAll("\\([^\\)]*\\)","");
于 2012-12-06T11:53:21.850 に答える