在Java中将复杂的字符串解析为整数集

时间:2016-01-15 01:53:05

标签: java string parsing

我是一名初学程序员,我的任务是计算电话总费用,一串电话号码和通话时间。对我来说计算很容易,但解析字符串本身是非常具有挑战性的。我需要将包含分号,逗号和换行符的字符串转换为电话号码集和总呼叫时间。字符串如下所示:

hh:mm:ss,nnn-nnn-nnn
hh:mm:ss,nnn-nnn-nnn
hh:mm:ss,nnn-nnn-nnn

我知道如果我使用扫描仪和hasNext函数读取文本文件,我可以按行解析,那么我应该以某种方式使用\n吗?使用split(":")不会让我走得太远。

还有其他有用的东西吗? 任何帮助或有用的信息将不胜感激!

4 个答案:

答案 0 :(得分:0)

您可以使用拆分功能,只需指定要与"[]"拆分的每个令牌 例如,使用split("[ ,:-]")

代码

String number = "11:22:33,444-555-666";
String[] numbers = number.split("[ ,:-]");
for (String temp: numbers){
System.out.println(temp);

给出结果

  

11   22   33   444   555   666

答案 1 :(得分:0)

您可以执行多次拆分,首先将时间与电话号码分开,然后将每个部分分开。例如:

Scanner sc = new Scanner(inputStr);

while (sc.hasNextLine()) {
    String line = sc.nextLine();
    String parts[] = line.split(",");
    String time[] = parts[0].split(":");
    String phone[] = parts[1].split("-");
    // Process the time and phone number here
}

可变部分有两个元素,时间和电话号码。变量时间包含时间的三个元素,而手机包含电话号码的三个元素。

答案 2 :(得分:0)

我更喜欢正则表达式和模式/匹配器来完成这类任务:

- (IBAction)Cancel:(id)sender {
    if ([self.delegate respondsToSelector:@selector(addItemViewControllerDidCancel:)]) {
         [self.delegate addItemViewControllerDidCancel:self];
    }
}

答案 3 :(得分:0)

public class MultiSplit {

    public static void main(final String[] args) {
        final String INPUT = "14:23:51,n11-n12-n13   \n"//
                + "   15:24:46,n21-n22-n23   \n" //
                + "   15:2a:46,n21-n22-n23   \n" // error
                + "\n" // error
                + "null\n" // error
                + " 12:11:10,n31-n32n33  \n" // error
                + " 12:1111,n31-n32n33  \n" // error
                + " 12:11:12,n31-n32-n33\n";

        final String[] dirtyLines = INPUT.split("\n");

        System.out.println("MODE 1");
        for (final String dirtyLine : dirtyLines) {
            try {
                final String cleanLine = dirtyLine.trim();
                final String line = cleanLine.replace(",", ":");
                final String[] parts = line.split(":");

                final int hour = Integer.parseInt(parts[0]);
                final int minute = Integer.parseInt(parts[1]);
                final int second = Integer.parseInt(parts[2]);
                final String phone = parts[3];
                System.out.println("h:" + hour + "\tm:" + minute + "\ts:" + second + " \t => " + phone);

            } catch (final Exception e) {
                System.err.println("Error on line <" + dirtyLine + ">: " + e);
            }
        }

        System.out.println("\n\nMODE 2");
        for (final String dirtyLine : dirtyLines) {
            try {
                final String cleanLine = dirtyLine.trim();
                final String line = cleanLine.replace(",", ":").replace("-", ":");
                final String[] parts = line.split(":");

                final int hour = Integer.parseInt(parts[0]);
                final int minute = Integer.parseInt(parts[1]);
                final int second = Integer.parseInt(parts[2]);
                final String phone1 = parts[3];
                final String phone2 = parts[4];
                final String phone3 = parts[5];
                System.out.println("h:" + hour + "\tm:" + minute + "\ts:" + second + " \t => " + phone1 + "#" + phone2 + "#" + phone3);

            } catch (final Exception e) {
                System.err.println("Error on line <" + dirtyLine + ">: " + e);
            }
        }

    }

}