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

Java新手求助:如何按字符串内的数字排序提取出的单词?

解决方案:按数字排序提取单词

思路分析

要解决这个问题,核心是拆分出每个单词和对应的排序数字,再按数字顺序拼接单词:

  1. 遍历输入字符串,识别每个数字(1-9)的位置,截取数字前的单词。
  2. 用数组存储数字与单词的对应关系(数字作为数组索引,直接对应位置)。
  3. 按数字顺序遍历数组,拼接成最终句子。

方法一:基础遍历实现(适合新手理解)

这种方法通过逐个字符遍历,手动截取单词和数字,逻辑清晰,适合刚学Java的同学:

public class WordSort {
    public static void main(String[] args) {
        String input = "my1kiran4name2is3";
        // 用数组存储,索引对应数字(1-9),数组长度设为10避免索引越界
        String[] wordArray = new String[10];
        StringBuilder currentWord = new StringBuilder();

        for (char c : input.toCharArray()) {
            // 判断当前字符是否是数字(1-9)
            if (Character.isDigit(c)) {
                // 把当前拼接好的单词存入对应数字的索引位置
                int num = c - '0'; // 字符转数字
                wordArray[num] = currentWord.toString();
                // 重置StringBuilder,准备下一个单词
                currentWord.setLength(0);
            } else {
                // 非数字字符,拼接到当前单词
                currentWord.append(c);
            }
        }

        // 拼接最终句子
        StringBuilder result = new StringBuilder();
        for (int i = 1; i <= 9; i++) {
            if (wordArray[i] != null) {
                if (result.length() > 0) {
                    result.append(" "); // 单词间加空格
                }
                result.append(wordArray[i]);
            }
        }

        System.out.println(result.toString()); // 输出:my name is kiran
    }
}

代码解释:

  • wordArray:数组索引直接对应数字(比如索引1存数字1对应的单词),不用额外排序,直接按顺序遍历即可。
  • currentWord:临时存储当前正在拼接的单词,遇到数字时就把单词存入数组对应位置。
  • 最后遍历数组1到9的位置,把非空的单词用空格连接起来。

方法二:正则表达式实现(更简洁)

如果对正则有基础,可以用正则一次性匹配所有"单词+数字"的组合,代码更简洁:

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

public class WordSortRegex {
    public static void main(String[] args) {
        String input = "my1kiran4name2is3";
        String[] wordArray = new String[10];
        // 正则匹配:匹配字母组成的单词,后面跟一个数字
        Pattern pattern = Pattern.compile("([a-zA-Z]+)(\\d)");
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            String word = matcher.group(1); // 获取匹配到的单词
            int num = Integer.parseInt(matcher.group(2)); // 获取匹配到的数字
            wordArray[num] = word;
        }

        // 拼接结果,和方法一一致
        StringBuilder result = new StringBuilder();
        for (int i = 1; i <= 9; i++) {
            if (wordArray[i] != null) {
                if (result.length() > 0) {
                    result.append(" ");
                }
                result.append(wordArray[i]);
            }
        }

        System.out.println(result.toString());
    }
}

代码解释:

  • 正则([a-zA-Z]+)(\\d):[a-zA-Z]+匹配一个或多个字母(单词),\\d匹配一个数字,括号用来分组提取内容。
  • matcher.find()会逐个找到所有符合规则的组合,然后提取单词和数字存入数组。

关键注意点

  • 数字是1-9的单个数字,所以用数组存储是最高效的,不用额外排序操作。
  • 确保输入字符串的格式符合要求:每个单词后面紧跟一个1-9的数字,没有连续数字或无数字的单词。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:25:19