1

我有一个包含几个数字(通常是日期)和分隔符的字符串。分隔符可以是“,”或“。” - 或示例 01.05,2000.5000

....现在我需要将这些数字分开并放入一个数组中,但我不知道该怎么做(分离部分)。另外,我需要检查字符串是否有效——它不能是 01.,05。

我不是要求任何人为我解决问题(但如果有人想要我感谢它),只需指出我正确的方向 :)

4

7 回答 7

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+")is时它是一个数字true),那么你的索引src是无效的。

于 2013-05-18T01:41:51.933 回答
1

验证:

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

此正则表达式检查:

  • 点和逗号从不相邻
  • 输入仅由数字、点和逗号组成

分开:

String[] numbers = input.split("[.,]");
于 2013-05-18T01:45:57.600 回答
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);
        }
    }
}
于 2013-05-18T01:46:38.780 回答
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");
    }
于 2013-05-18T01:48:18.523 回答
1

如果可能的话,我会为此使用番石榴字符串拆分器。它比String#split. 你可以准确地告诉它期望什么,省略什么等等。

对于示例用法,以及关于愚蠢的 javasplit有时行为的小咆哮,请看这里:http ://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter

于 2013-05-18T01:49:40.100 回答
1

尝试这个:

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

StringUtils来自Apache Commons>> http://commons.apache.org/proper/commons-lang/

于 2013-05-18T01:55:38.363 回答
0

为了分隔字符串,使用split(),方法的参数是分隔符

array = string.split("分隔符");

于 2013-05-18T01:24:32.147 回答