Java 将以相同名称开头的字符串连接在一起

Java 将以相同名称开头的字符串连接在一起,java,Java,我正在尝试将具有相同名称的字符串合并在一起 根据当前状态,我得到以下输出 我已尝试将地图的值更改为列表,但我得到: 类型映射中的方法put(String,List)不适用于参数(String,String) 输出 Ravensbusch 11:38 18:38 23:38 apple 11:54 18:54 23:53 table 11:50 18:50 23:49 markt haus 11:46 18:46 23:45 Rathausmarkt 11:41 18:41 23:40 输出应该

我正在尝试将具有相同名称的字符串合并在一起

根据当前状态,我得到以下输出

我已尝试将地图的值更改为列表,但我得到:

类型映射中的方法put(String,List)不适用于参数(String,String)

输出

Ravensbusch 11:38 18:38 23:38
apple 11:54 18:54 23:53
table 11:50 18:50 23:49
markt haus 11:46 18:46 23:45
Rathausmarkt 11:41 18:41 23:40
输出应该是这样的;使用类似于缓冲区数组列表中的顺序:

Ravensbusch 04:41 ..... 23:38
Rathausmarkt 04:43 .... 23:40
markt haus 04:48 .... 18:46 23:45
table 04:52 .... 23:49
apple 04:56 ..... 23:53
 private static final Pattern pattern = 
        Pattern.compile("^ *(.+?)( +(?:[01][0-9]|2[0-3]):[0-5][0-9])+ *$");

public static void main(String[] args) {

    ArrayList<String> buffer = new ArrayList<String>();

    buffer.add("Ravensbusch street 04:41 05:41 06:09 06:38 07:08 07:38 08:08 08:38 09:08 09:38 10:08 10:38 11:08 11:38");
    buffer.add("Rathausmarkt 04:43 05:43 06:11 06:41 07:11 07:41 08:11 08:41 09:11 09:41 10:11 10:41 11:11 11:41");
    buffer.add("markt haus 04:48 05:48 06:16 06:46 07:16 07:46 08:16 08:46 09:16 09:46 10:16 10:46 11:16 11:46");
    buffer.add("table 04:52 05:52 06:20 06:50 07:20 07:50 08:20 08:50 09:20 09:50 10:20 10:50 11:20 11:50");
    buffer.add("apple 04:56 05:56 06:24 06:54 07:24 07:54 08:24 08:54 09:24 09:54 10:24 10:54 11:24 11:54");


    buffer.add("Ravensbusch street 12:08 12:38 13:08 13:38 14:08 14:38 15:08 15:38 16:08 16:38 17:08 17:38 18:08 18:38");
    buffer.add("Rathausmarkt 12:11 12:41 13:11 13:41 14:11 14:41 15:11 15:41 16:11 16:41 17:11 17:41 18:11 18:41");
    buffer.add("markt haus 12:16 12:46 13:16 13:46 14:16 14:46 15:16 15:46 16:16 16:46 17:16 17:46 18:16 18:46");
    buffer.add("table 12:20 12:50 13:20 13:50 14:20 14:50 15:20 15:50 16:20 16:50 17:20 17:50 18:20 18:50");
    buffer.add("apple 12:24 12:54 13:24 13:54 14:24 14:54 15:24 15:54 16:24 16:54 17:24 17:54 18:24 18:54");

    buffer.add("Ravensbusch street 19:08 19:38 20:08 20:38 21:38 22:38 23:38");
    buffer.add("Rathausmarkt 19:11 19:41 20:11 20:40 21:40 22:40 23:40");
    buffer.add("markt haus 19:16 19:46 20:16 20:45 21:45 22:45 23:45");
    buffer.add("table 19:20 19:50 20:20 20:49 21:49 22:49 23:49");
    buffer.add("apple 19:24 19:54 20:24 20:53 21:53 22:53 23:53");


    Map<String, String> stops = new HashMap<>(); 

     for (String line : buffer) {

            Matcher matcher = pattern.matcher(line);
            if (matcher.find()) {
                if (stops.containsKey(matcher.group(1))) {
                   stops.put(matcher.group(1), stops.get(matcher.group(1)) + matcher.group(2));
                } else {
                   stops.put(matcher.group(1), matcher.group(2).trim());
                }
            }                        
     }

     ArrayList<String> result = new ArrayList<>(stops.keySet().size());
     for (String key : stops.keySet()) {
         result.add(key + " " + stops.get(key));
     }

     for(String output: result){
         System.out.println(output);
     }                  
}
代码:

Ravensbusch 04:41 ..... 23:38
Rathausmarkt 04:43 .... 23:40
markt haus 04:48 .... 18:46 23:45
table 04:52 .... 23:49
apple 04:56 ..... 23:53
 private static final Pattern pattern = 
        Pattern.compile("^ *(.+?)( +(?:[01][0-9]|2[0-3]):[0-5][0-9])+ *$");

public static void main(String[] args) {

    ArrayList<String> buffer = new ArrayList<String>();

    buffer.add("Ravensbusch street 04:41 05:41 06:09 06:38 07:08 07:38 08:08 08:38 09:08 09:38 10:08 10:38 11:08 11:38");
    buffer.add("Rathausmarkt 04:43 05:43 06:11 06:41 07:11 07:41 08:11 08:41 09:11 09:41 10:11 10:41 11:11 11:41");
    buffer.add("markt haus 04:48 05:48 06:16 06:46 07:16 07:46 08:16 08:46 09:16 09:46 10:16 10:46 11:16 11:46");
    buffer.add("table 04:52 05:52 06:20 06:50 07:20 07:50 08:20 08:50 09:20 09:50 10:20 10:50 11:20 11:50");
    buffer.add("apple 04:56 05:56 06:24 06:54 07:24 07:54 08:24 08:54 09:24 09:54 10:24 10:54 11:24 11:54");


    buffer.add("Ravensbusch street 12:08 12:38 13:08 13:38 14:08 14:38 15:08 15:38 16:08 16:38 17:08 17:38 18:08 18:38");
    buffer.add("Rathausmarkt 12:11 12:41 13:11 13:41 14:11 14:41 15:11 15:41 16:11 16:41 17:11 17:41 18:11 18:41");
    buffer.add("markt haus 12:16 12:46 13:16 13:46 14:16 14:46 15:16 15:46 16:16 16:46 17:16 17:46 18:16 18:46");
    buffer.add("table 12:20 12:50 13:20 13:50 14:20 14:50 15:20 15:50 16:20 16:50 17:20 17:50 18:20 18:50");
    buffer.add("apple 12:24 12:54 13:24 13:54 14:24 14:54 15:24 15:54 16:24 16:54 17:24 17:54 18:24 18:54");

    buffer.add("Ravensbusch street 19:08 19:38 20:08 20:38 21:38 22:38 23:38");
    buffer.add("Rathausmarkt 19:11 19:41 20:11 20:40 21:40 22:40 23:40");
    buffer.add("markt haus 19:16 19:46 20:16 20:45 21:45 22:45 23:45");
    buffer.add("table 19:20 19:50 20:20 20:49 21:49 22:49 23:49");
    buffer.add("apple 19:24 19:54 20:24 20:53 21:53 22:53 23:53");


    Map<String, String> stops = new HashMap<>(); 

     for (String line : buffer) {

            Matcher matcher = pattern.matcher(line);
            if (matcher.find()) {
                if (stops.containsKey(matcher.group(1))) {
                   stops.put(matcher.group(1), stops.get(matcher.group(1)) + matcher.group(2));
                } else {
                   stops.put(matcher.group(1), matcher.group(2).trim());
                }
            }                        
     }

     ArrayList<String> result = new ArrayList<>(stops.keySet().size());
     for (String key : stops.keySet()) {
         result.add(key + " " + stops.get(key));
     }

     for(String output: result){
         System.out.println(output);
     }                  
}
private静态最终模式=
编译(“^*(.+?)(+(?:[01][0-9]| 2[0-3]):[0-5][0-9])+*$”;
公共静态void main(字符串[]args){
ArrayList缓冲区=新的ArrayList();
缓冲区。添加(“天之迷街04:41 05:41 06:09 06:38 07:08 07:38 08:38 09:38 10:08 10:38 11:08 11:38”);
buffer.add(“Rathausmarkt 04:43 05:43 06:11 06:41 07:11 07:41 08:11 08:41 09:11 09:41 10:11 10:41”);
buffer.add(“markt haus 04:48 05:48 06:16 06:46 07:16 07:46 08:16 08:46 09:16 09:46 10:16 11:46”);
添加(“表04:52 05:52 06:20 06:50 07:20 07:50 08:20 08:50 09:20 09:50 10:20 10:50 11:20 11:50”);
add(“苹果04:56 05:56 06:24 06:54 07:24 07:54 08:24 08:54 09:24 09:54 10:24 10:54 11:24 11:54”);
缓冲区。添加(“天之迷大街12:08 12:38 13:08 13:38 14:08 14:38 15:08 15:38 16:08 16:38 17:08 17:38 18:08 18:38”);
buffer.add(“Rathausmarkt 12:11 12:41 13:11 13:41 14:11 14:41 15:11 15:41 16:11 16:41 17:11 17:41 18:11 18:41”);
buffer.add(“markt haus 12:16 12:46 13:16 13:46 14:16 14:46 15:16 15:46 16:46 17:16 17:46 18:16 18:46”);
添加(“表12:20 12:50 13:20 13:50 14:20 14:50 15:50 16:20 16:50 17:20 17:50 18:20 18:50”);
buffer.add(“苹果12:2412:5413:2413:5414:2414:5415:5416:2416:5417:2417:5418:2418:54”);
缓冲区。添加(“天之迷街19:08 19:38 20:08 20:38 21:38 22:38 23:38”);
buffer.add(“Rathausmarkt 19:11 19:41 20:11 20:40 21:40 22:40 23:40”);
添加(“markt haus 19:16 19:46 20:16 20:45 21:45 22:45 23:45”);
添加(“表19:20 19:50 20:20:49 21:49 22:49 23:49”);
add(“苹果19:2419:5420:2420:5321:5322:5323:53”);
Map stops=newhashmap();
for(字符串行:缓冲区){
匹配器匹配器=模式匹配器(线);
if(matcher.find()){
if(stops.containsKey(matcher.group(1))){
stops.put(matcher.group(1),stops.get(matcher.group(1))+matcher.group(2));
}否则{
stops.put(matcher.group(1)、matcher.group(2.trim());
}
}                        
}
ArrayList结果=新建ArrayList(stops.keySet().size());
for(字符串键:stops.keySet()){
结果.add(key+“”+stops.get(key));
}
for(字符串输出:结果){
系统输出打印项次(输出);
}                  
}

在您的情况下,最好使用数据结构-多重映射。请参阅本文:

您可以使用。它可能看起来很像。

创建一个对象,该对象将包含地点和时间的字符串作为单个
字符串。在构造函数中,拆分字符串并解析每个变量。如果
DateFormat.parse()
抛出异常,您就知道它是一个名称,因此,将其添加到names变量,反之亦然。以下是一个例子:

public class PlaceTime {
    StringBuilder place = new StringBuilder();
    Queue<String> times = new PriorityBlockingQueue<>();

    public PlaceTime(String placeTime) {

        DateFormat dateFormat = new SimpleDateFormat("HH:mm");
        for (String i:placeTime.split(" ")) {
            try {
                dateFormat.parse(i);
                //No exception, add as time
                times.add(i);
            } catch (Exception e) {
                //Exception, add as place name
                place.append(i).append(" ");
            }
        }
    }

    public String getPlace() {
        return place.toString();
    }

    public Queue<String> getTimes() {
        return this.times;
    }
}
该输出将是:

Ravensbusch street 
[04:41, 05:41, 06:09, 06:38, 07:08, 07:38, 08:08, 08:38, 09:08, 09:38, 10:08, 10:38, 11:08, 11:38, 12:08, 12:38, 13:08, 13:38, 14:08, 14:38, 15:08, 15:38, 16:08, 16:38, 17:08, 17:38, 18:08, 18:38, 19:08, 19:38, 20:08, 20:38, 21:38, 22:38, 23:38]

非常感谢,但是当我想在映射中输出结果时,有没有办法保持arrayList的顺序?映射中的列表保持原始插入顺序。你想把地图上的时间从早到晚排序吗?是的,请告诉我站点名称的顺序,因为它在列表中。我在列表中添加了新的值,如
love street
。在列表中,他们的顺序是正确的,然后是love street的值,但后来当我在地图中循环时,我得到了错误的顺序,即:love street,然后是Ravensbuch street,地图没有原始的插入,我知道了,您希望保留名称的插入顺序和时间顺序。对于时间,您可以使用
队列
而不是列表。要保持插入顺序,可以将
HashMap
的实现更改为
LinkedHashMap
。我已经更新了我的答案。