You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java拆分包含城市名与坐标数值的字符串遇到问题该如何解决

Java拆分带空格城市名与数值字符串的解决方案

你的字符串格式固定为「城市名 + 空格 + x浮点值 + 空格 + y浮点值」,只有最后两个片段是数值,前面所有内容都属于城市名,可通过以下两种方案实现拆分:

方案1:从后往前分割(适合初学者,无需正则基础)

思路:先按空格拆分所有片段,取最后两个片段转成double作为x、y,前面的所有片段拼接回城市名即可。

public class CitySplitDemo {
    public static void main(String[] args) {
        String[] CITIES = {
                "Vancouver 94.0 15.0",
                "Seattle 88.0 52.0",
                "Portland 74.0 88.0",
                "San Francisco 42.0 241.0",
                "Los Angeles 89.0 338.0",
                "Las Vegas 153.0 302.0",
                "Calgary 259.0 15.0",
                "Salt Lake City 224.0 216.0",
                "Phoenix 192.0 348.0",
                "Helena 247.0 90.0"
        };

        for (String cityStr : CITIES) {
            // 按空格拆分所有片段
            String[] parts = cityStr.split(" ");
            // 最后两个元素是x、y
            double x = Double.parseDouble(parts[parts.length - 2]);
            double y = Double.parseDouble(parts[parts.length - 1]);
            // 前面所有片段拼接为城市名
            StringBuilder cityName = new StringBuilder();
            for (int i = 0; i < parts.length - 2; i++) {
                if (i > 0) cityName.append(" ");
                cityName.append(parts[i]);
            }
            // 这里可根据需求做后续业务处理
            System.out.printf("城市:%s,x:%.1f,y:%.1f%n", cityName, x, y);
        }
    }
}

方案2:正则分组匹配(代码更简洁)

思路:用正则表达式直接匹配三个部分,第一个分组匹配所有城市名字符,后两个分组匹配浮点数值。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CitySplitRegexDemo {
    public static void main(String[] args) {
        String[] CITIES = {
                "Vancouver 94.0 15.0",
                "Seattle 88.0 52.0",
                "Portland 74.0 88.0",
                "San Francisco 42.0 241.0",
                "Los Angeles 89.0 338.0",
                "Las Vegas 153.0 302.0",
                "Calgary 259.0 15.0",
                "Salt Lake City 224.0 216.0",
                "Phoenix 192.0 348.0",
                "Helena 247.0 90.0"
        };
        // 正则定义3个分组,分别对应城市名、x值、y值
        Pattern pattern = Pattern.compile("^(.*?)\\s+(\\d+\\.\\d+)\\s+(\\d+\\.\\d+)$");
        for (String cityStr : CITIES) {
            Matcher matcher = pattern.matcher(cityStr);
            if (matcher.find()) {
                String cityName = matcher.group(1);
                double x = Double.parseDouble(matcher.group(2));
                double y = Double.parseDouble(matcher.group(3));
                // 这里可根据需求做后续业务处理
                System.out.printf("城市:%s,x:%.1f,y:%.1f%n", cityName, x, y);
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:06:00