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

在Java中将复杂字符串解析为整数集,java,string,parsing,Java,String,Parsing,我是一名初级程序员,我的任务是计算打电话的总费用、一串电话号码和通话时间。对我来说,进行计算很容易,但是解析字符串本身却很有挑战性。我需要将包含分号、逗号和换行符的字符串转换为电话号码和总通话时间的整数集。字符串如下所示: hh:mm:ss,nnn-nnn-nnn hh:mm:ss,nnn-nnn-nnn hh:mm:ss,nnn-nnn-nnn 我知道如果我使用scanner和hasNext函数读取文本文件,我将能够逐行解析,那么我是否应该以某种方式利用\n?使用拆分(“:”不会让我走多远

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

hh:mm:ss,nnn-nnn-nnn
hh:mm:ss,nnn-nnn-nnn
hh:mm:ss,nnn-nnn-nnn
我知道如果我使用scanner和
hasNext
函数读取文本文件,我将能够逐行解析,那么我是否应该以某种方式利用
\n
?使用
拆分(“:”
不会让我走多远

还有什么可以帮助你的吗?
任何帮助或有用的信息将不胜感激

您可以使用split函数,只需使用
“[]”
例如,使用
split(“[,:-]”)

代码

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

十一, 22 33 444 555 666


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

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
}

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

对于这类任务,我更喜欢正则表达式和模式/匹配器:

        private static final String REGEX =
        "..:..:..,...-...-...";

    private static final String INPUT = "h1:m1:s1,nnn-nnn-nnn   \n"
            + "   h2:m2:s2,nnn-nnn-nnn   \n"
            + " hh:mm:ss,nnn-nnn-nnn";

    public static void main(String[] args) {
       Pattern p = Pattern.compile(REGEX);
       Matcher matcher = p.matcher(INPUT);
       while(matcher.find()) {
           String timePhoneNumber = matcher.group(0);
           String tokens[] = timePhoneNumber.split(",");
           String time = tokens[0];
           String phoneNumber = tokens[1];
           System.out.println("Time="+time+"; phone="+phoneNumber);
      }
   }
公共类多重分裂{
公共静态void main(最终字符串[]args){
最终字符串输入=“14:23:51,n11-n12-n13\n”//
+15:24:46,n21-n22-n23\n//
+“15:2a:46,n21-n22-n23\n”//error
+“\n”//错误
+“空\n”//错误
+“12:11:10,n31-n32n33\n”//error
+“12:1111,n31-n32n33\n”//error
+“12:11:12,n31-n32-n33\n”;
最终字符串[]dirtyLines=INPUT.split(“\n”);
系统输出打印项次(“模式1”);
for(最终字符串目录行:目录行){
试一试{
最终字符串cleanLine=dirtyLine.trim();
最后一行字符串=cleanLine.replace(“,”,“:”);
最终字符串[]部分=行。拆分(“:”);
final int hour=Integer.parseInt(部分[0]);
final int minute=Integer.parseInt(部分[1]);
final int second=Integer.parseInt(部分[2]);
最终字符串电话=部件[3];
System.out.println(“h:+hour+”\tm:+minute+”\ts:+second+“\t=>”+phone);
}捕获(最终异常e){
System.err.println(“第行错误:+e”);
}
}
System.out.println(“\n\n模式2”);
for(最终字符串目录行:目录行){
试一试{
最终字符串cleanLine=dirtyLine.trim();
最后一行字符串=cleanLine.replace(“,”:”).replace(“-”,“:”);
最终字符串[]部分=行。拆分(“:”);
final int hour=Integer.parseInt(部分[0]);
final int minute=Integer.parseInt(部分[1]);
final int second=Integer.parseInt(部分[2]);
最终字符串phone1=部分[3];
最终字符串phone2=部分[4];
最终字符串phone3=部分[5];
System.out.println(“h:+hour+”\tm:+minute+”\ts:+second+“\t=>”+phone1+“#”+phone2+“#”+phone3);
}捕获(最终异常e){
System.err.println(“第行错误:+e”);
}
}
}
}

Split on comma将时间与电话号码分开,然后使用一些日期/时间库类为您解析时间-大量示例可用于此部分。查看。谢谢!这很有帮助
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);
            }
        }

    }

}