2013-05-18 128 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/