2014-11-22 61 views
0

我試圖圍繞這個問題繞過我的頭,任何幫助將不勝感激。我試圖讓用戶輸入一個字符串,從一個數字(1-9)開始。當輸入字符串時,我需要打印一個子字符串,但只能輸入輸入的數字。例如,如果用戶輸入「4大房子」,我的輸出應該是「4 bi」。我有它正確顯示,但是我的代碼很長時間以來很多其他語句如果語句。使用以數字開頭的字符串來顯示多個字符的子字符串

另一種方法是減少代碼行數量?

而且,是的,我得到一個「字符串索引超出範圍的」異常,如果如果字符串以4開頭,但只包含3個字符的用戶沒有輸入足夠的字符,即...

  else if (text.substring(0,1).matches("[0-9]"))   
      { 

      if (text.substring(0,1).matches("1"))    
      { 

       String text2 = text.substring(0, 1); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 1!"); 
      } 
      else if (text.substring(0,1).matches("2")) 
      { 
       String text2 = text.substring(0, 2); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 2!"); 
      } 
      else if (text.substring(0,1).matches("3")) 
      { 
       String text2 = text.substring(0, 3); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 3!"); 
      } 
      else if (text.substring(0,1).matches("4")) 
      { 
       String text2 = text.substring(0, 4); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 4!"); 
      } 
      else if (text.substring(0,1).matches("5")) 
      { 
       String text2 = text.substring(0, 5); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 5!"); 
      } 
      else if (text.substring(0,1).matches("6")) 
      { 
       String text2 = text.substring(0, 6); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 6!"); 
      } 
      else if (text.substring(0,1).matches("7")) 
      { 
       String text2 = text.substring(0, 7); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 7!"); 
      } 
      else if (text.substring(0,1).matches("8")) 
      { 
       String text2 = text.substring(0, 8); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 8!"); 
      } 
      else if (text.substring(0,1).matches("9")) 
      { 
       String text2 = text.substring(0, 9); 
       System.out.println("The decoded string is: " + text2 + ", and starts with a 9!"); 
      } 
     } 
+1

那麼如果第一個字符應該是1和9之間的數字,你不應該使用'[1-9]'而不是'[0-9]'?後者也會允許數字'0'。 – Tom 2014-11-22 23:41:34

回答

3

您可以將字符串的第一個字符轉換爲int,然後使用該int值將所有變體1 - 9合併爲一個。爲了防止「字符串索引超出範圍」的消息,只是檢查字符串是足夠長的時間:

if (text.substring(0,1).matches("[0-9]")) { 
    int charCount = Integer.parseInt(text.substring(0, 1)); 
    String text2 = text; 
    if (text.length() > charCount) { 
    text2 = text.substring(0, charCount); 
    } 
    System.out.println(text2); 
} 
0

不使用的if/else這一點。存儲在一個變量輸入的號碼,並在子()方法

注意使用方法:不完全正確的語法,比如ONLY

if(text[0].matches([0-9]){ 
    var endPoint= parseInt(text[0]);//parseInt means parseInteger 
    String text2 = text.substring(0, endPoint); 
    System.out.println("The decoded string is: " + text2 + ", and starts with a"+endPoint+"!"); 

} 
0

試試這個:

String sub = text.substring(0,1); 

if(sub.matches("[0-9]")) { 
    try{ 
    System.out.println("The decoded string is: " 
     + text.substring(0, Integer.parseInt(sub)) 
     + "and starts with a " + sub + "!"); 
    } catch(Exception e) { 
     System.out.println(text); 
    } 
} 

在try-catch以防萬一您的字符串太短。

1

您需要抓住字符串中的第一個字符並將其轉換爲數字。

所以:

int number = Integer.parseInt(text.substring(0,1)); 
String text2 = text.substring(0,number); 
System.out.println("The decoded string is: " + text2 + ", and starts with a " + number +"!"); 

parseInt()可以拋出一個NumberFormatException如果第一個字符是不是一個數字,所以也許使用try/catch塊。

0

A「黑客」之類的例子,如果你需要一個非常短版:-)

int len = text.charAt(0)-0x30; 
if(len > 0 && len < 10) { 
    System.out.printf("The decoded string is: %s, and starts with a %d!\n", 
     s.substring(0, len), len); 
} 
0
String sourceText = "4 test"; 

    // Validate input first 
    if (sourceText == null || sourceText.isEmpty() || !Character.isDigit(sourceText.charAt(0))) { 
     System.out.println("The string must start with a digit."); 
     return; 
    } 
    // Use getNumericValue instead of Integer.parseInt 
    int count = Character.getNumericValue(sourceText.charAt(0)); 
    String resultText = count < sourceText.length() ? sourceText.substring(0, count) : sourceText; 

    // Use String.format 
    System.out.println(String.format("The decoded string is \"%s\" and starts with a %d!", resultText, count)); 
相關問題