2013-05-18 126 views
1

我有一個包含幾個數字(通常是日期)和分隔符的字符串。分隔符可以是「,」或「。」 - 或例子01.05,2000.5000Java - 從字符串中分離數字

....現在我需要將這些數字分開並放入一個數組,但我不知道如何做到這一點(分離部分)。另外,我需要檢查字符串是否有效 - 它不能是01. 05。

我不要求任何人都可以解決的事情,我(但如果有人想我很感激它),只是點我朝着正確的方向:)

+1

'String#split(...)'允許使用正則表達式作爲分隔符。我會試驗一下。所有你需要的東西都非常簡單。 –

+0

您的字符串是否包含「,」和「。」都在一個單一的字符串? –

+0

@JDeveloper我會說是,因爲他的例子都有。 – FDinoff

回答

1

這是StringTokenizer類做的一種方式,只是重複的令牌,如果獲取的令牌是空的,那麼你有一個無效的字符串,也由parseInt方法令牌轉換爲整數檢查它們是否有效整數:

import java.util.*; 
public class t { 
    public static void main(String... args) { 
     String line = "01.05,2000.5000"; 
     StringTokenizer strTok = new StringTokenizer(line, ",."); 
     List<Integer> values = new ArrayList<Integer>(); 
     while (strTok.hasMoreTokens()) { 
      String s = strTok.nextToken(); 
      if (s.length() == 0) { 
       // Found a repeated separator, String is not valid, do something about it 
      } 
      try { 
       int value = Integer.parseInt(s, 10); 
       values.add(value); 
      } catch(NumberFormatException e) { 
       // Number not valid, do something about it or continue the parsing 
      } 
     } 

     // At the end, get an array from the ArrayList 
     Integer[] arrayOfValues = values.toArray(new Integer[values.size()]); 

     for (Integer i : arrayOfValues) { 
      System.out.println(i); 
     } 
    } 
} 
0

爲字符串,採用分體式分離( ),該方法的參數是分隔符

array = string.split(「separator」);

+0

'split()'需要使用正則表達式,這就是爲什麼我刪除了我的答案 –

+0

首先,必須檢查字符串是否有效,然後纔可以使用拆分方法,我認爲 – scgr

1

遍歷String#split(regex)生成的數組並檢查每個值以確保您的源String是「有效的」。

在:

String src = "01.05,2000.5000"; 
String[] numbers = src.split("[.,]"); 

numbers這裏將是Strings陣列,像{"01", "05", "2000", "5000"}。每個值都是一個數字。

現在迭代numbers。如果您發現索引不是數字(這是numbers[i].matches("\\d+")true時的數字),那麼您的src無效。

1

要驗證:

if (input.matches("^(?!.*[.,]{2})[\\d.,]+)) 

此正則表達式檢查的是:

  • 點和逗號從不相鄰
  • 輸入只包括數字,圓點和逗號

要拆分:

String[] numbers = input.split("[.,]"); 
+0

謝謝。它的工作正常。你能幫我學習如何輕鬆學習正則表達式。 –

+0

先生,不應該'數字'是一個數組作爲分裂函數返回一個數組? –

+0

@RaviTrivedi OOPS!離開方括號。謝謝 – Bohemian

1

使用正則表達式來組和匹配輸入

String s = "01.05,2000.5000";  
    Pattern pattern = Pattern.compile("(\\d{2})[.,](\\d{2})[.,](\\d{4})[.,](\\d{4})");  
    Matcher m = pattern.matcher(s); 

    if(m.matches()) { 
     String[] matches = { m.group(1),m.group(2), m.group(3),m.group(4) }; 
     for(String match : matches) { 
      System.out.println(match); 
     } 
    } else { 
     System.err.println("Mismatch"); 
    } 
1

如果可能的話,我會用番石榴的String爲此而分解。它比String#split更可靠,更可預測,更靈活。您可以準確地告訴它期望什麼,省略什麼,等等。

舉一個例子使用,以及如何愚蠢的Java類split有時相當於一個小的咆哮,看看這裏:http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter

1

試試這個:

String str = "01.05,2000.5000"; 
str = str.replace(".",","); 
int number = StringUtils.countMatches(str, ","); 
String[] arrayStr = new String[number+1]; 
arrayStr = str.split(","); 

StringUtilsApache Commons >>http://commons.apache.org/proper/commons-lang/