有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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


共 (4) 个答案

  1. # 1 楼答案

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

            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);
          }
       }
    
  2. # 2 楼答案

    您可以使用split函数,只需使用"[]"指定每个要拆分的标记即可 例如,使用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

  3. # 3 楼答案

    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);
                }
            }
    
        }
    
    }
    
  4. # 4 楼答案

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

    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
    }
    

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