2016-02-29 124 views
1

我想寫一個循環,提示用戶輸入他們的第一個中間名和最後一個名,然後我想通過搜索每個名稱之間的空格來驗證該輸入。驗證用戶輸入字符串

示例:第一中間最後

我在找的是類似於下面的內容。僞代碼:如果名稱包含2個空白並且它們的名稱小於3個空格,則操作已成功,否則請告訴用戶重新輸入其第一個中間名和最後一個名。

我該如何去做這件事?

import java.util.Scanner; 

public class Example 
{ 
    public static void main(String[] args) 
    { 
     boolean isName = false; 
     String name = ""; 
     int x = name.length(); 
     Scanner input = new Scanner(System.in); 

     while(!isName) // Probably better to remove the while loop entirely 
     { 
      System.out.print("Please input your 'First Middle Last' name: "); 
      name = input.nextLine(); 
      name.trim(); // To remove any leading or trailing white spaces 

      for(int i = 0; i < x; i++) 
      { 
      if(name.lastIndexOf(' ', i) == 2 && name.lastIndexOf(' ', i) < 3) 
      {   

       isName = true; 
       break; 
      } 

       else 
       System.out.print("\nEnter your name as 'First Middle Last': "); 
       name = input.nextLine(); 
       name = name.trim(); 
       System.out.print("\nInvalid input");    

      } 
     } 
    } 
} 

以上產生一個無限循環,邏輯上我明白爲什麼。

+1

我想你應該考慮的正則表達式,這是簡單的任務 –

+1

我有一個很難理解大量的代碼:「如果名稱中包含2個白色空間及其少於3個白色空間名稱的操作有已成功「 – Ceelos

+0

怎麼樣?這是Psuedo代碼?如果此人進入托馬斯[空間]瓊斯[空間],然後[史密斯]輸入是正確的,如果用戶輸入[托馬斯]空間然後命中輸入然後輸入將是不正確的。我需要至少兩個空格 – Afflicted

回答

1

您可以在split之間對一個或多個空格字符String進行檢查,並檢查是否有三個元素。喜歡的東西,

boolean isName = false; 
String name = ""; 
Scanner input = new Scanner(System.in); 

while (!isName) { 
    System.out.print("Please input your 'First Middle Last' name: "); 
    name = input.nextLine(); 
    isName = (name.trim().split("\\s+").length == 3); 
    if (!isName) { 
     System.out.print("\nEnter your name as 'First Middle Last': "); 
    } 
} 
+0

這不是== 3它的<3,它已經設置檢查,如果它是== 2和Iv'e寫的方式現在不會工作任何方式大聲笑 – Afflicted

+0

@ElliottFrisch是我的壞... – brso05

+0

@Afflicted這是正確的答案。 – brso05

0

這是問題(無限循環):因爲name.length()是0最初

for(int i = 0; i < x; i++) 

x被初始化爲0。由於條件i<x永遠不會滿足,它永遠不會進入for循環,並且while循環永遠持續。

就在for循環之前,您需要做x = name.length()。另外,正如其他人所建議的,您需要在{}中附上else部分的聲明。

+0

謝謝你指出,我不能相信我把它放在那裏,可悲的是,即使它被初始化在正確的位置(如在字符串輸入後)它仍然不會工作,因爲它在邏輯上不能用if中的方法 – Afflicted

0

this link你可以指望空格有:

int numOfSpaces = s.length() - s.replaceAll(" ", "").length(); 

有了這個,你可以告訴你,如果有至少2位。該鏈接還通過計算給定String中存在多少空白的不同方法。
乾杯!