Java新手求助:如何按字符串内的数字排序提取出的单词?
解决方案:按数字排序提取单词
思路分析
要解决这个问题,核心是拆分出每个单词和对应的排序数字,再按数字顺序拼接单词:
- 遍历输入字符串,识别每个数字(1-9)的位置,截取数字前的单词。
- 用数组存储数字与单词的对应关系(数字作为数组索引,直接对应位置)。
- 按数字顺序遍历数组,拼接成最终句子。
方法一:基础遍历实现(适合新手理解)
这种方法通过逐个字符遍历,手动截取单词和数字,逻辑清晰,适合刚学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
相关产品推荐
相关产品推荐

