私は、ユーザーが最初の名前と姓を1つのフィールドに入力しなければならないシナリオがあるので、2つの名前の間にスペースが必要です少なくとも文字でなければならない。 contains("")
を使用しようとしましたが、ユーザーがスペースを入力してそのスペースの後に何も入力しない場合、このメソッドはtrueを返します。1つのフィールドの名と姓の正規表現
これを達成する方法を親切に教えてください。私もRegular Expression
を検索しようとしましたが、何も見つけられませんでした。
私は、ユーザーが最初の名前と姓を1つのフィールドに入力しなければならないシナリオがあるので、2つの名前の間にスペースが必要です少なくとも文字でなければならない。 contains("")
を使用しようとしましたが、ユーザーがスペースを入力してそのスペースの後に何も入力しない場合、このメソッドはtrueを返します。1つのフィールドの名と姓の正規表現
これを達成する方法を親切に教えてください。私もRegular Expression
を検索しようとしましたが、何も見つけられませんでした。
正規表現とテストです:
@Test
public void test_firstAndLastName_success() {
Pattern ptrn = Pattern.compile("(\\w+)\\s+(\\w+)");
Matcher matcher = ptrn.matcher("FirstName LastName");
if (matcher.find()) {
Assert.assertEquals("FirstName", matcher.group(1));
Assert.assertEquals("LastName", matcher.group(2));
} else {
Assert.fail();
}
}
検証がfind
にfalse
を返すmatcher
です。
複数のスペース()を許可しない場合は、+
(これは1つのタブで許可されます)を削除するか、スペースで置き換えてください。
あなたは、このようなコードを使用することができます:
public static void main(String[] args) throws IOException {
String input = "first last";
if (input.matches("[a-zA-Z]*[\\s]{1}[a-zA-Z].*")) {
String[] name = input.split(" ");
System.out.println(Arrays.toString(name));
} else {
System.out.println("Please input the valid name.");
}
}
場合には、配列に姓と名をつけます:
[a-zA-Z]*
- 入力文字で始まります。[\\s]{1}
- のみを含むスペース。[a-zA-Z].*
- と少なくともの1文字で終了します。ここで""を使った単純な分割は、文字列のトリミング後に行います。
より理解するために以下のコードを確認してください:
String[] splitter = null;
String s = "abbsd sdsdf"; // string with 2 words and space
splitter = s.trim().split(" ");
if(splitter.length!=2){
System.out.println("Please enter first or last name");
}
else{
System.out.println("First Name : "+splitter[0]);
System.out.println("Last Name : "+splitter[1]);
}
s = "abc"; //string without space
splitter = s.trim().split(" ");
if(splitter.length!=2){
System.out.println("Please enter first or last name");
}
else{
System.out.println("First Name : "+splitter[0]);
System.out.println("Last Name : "+splitter[1]);
}
をして、スペースのない他のシナリオに確認してください。これは助けになるはずです。
ええ、私はスペースの後に単一の文字を入力していない場合、私は彼を停止するでしょう – Kirmani88