Java如何根据字符串内部的价格整数值对字符串进行升序排序
实现思路
- 定义统一数据结构存储单条活动的完整内容和提取出的价格值,降低排序逻辑复杂度
- 通过正则表达式匹配所有内容中
price后的整数值,自动忽略后续的onwards等无关后缀 - 调用Java自带排序能力,按提取的价格整数值做升序排序,价格相同的条目顺序可按需调整
完整实现代码
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ActivitySorter { // 匹配price后面数字的正则规则 private static final Pattern PRICE_PATTERN = Pattern.compile("price (\\d+)"); // Java 16+ 可用record简化代码,低版本替换为普通POJO类即可 record Activity(String fullContent, int price) {} public static void main(String[] args) { // 初始化所有待排序的原始活动字符串 List<String> rawActivities = buildRawActivityList(); // 转换为Activity对象并提取对应价格 List<Activity> activityList = new ArrayList<>(); for (String raw : rawActivities) { int price = extractPrice(raw); activityList.add(new Activity(raw, price)); } // 按价格升序排序 activityList.sort(Comparator.comparingInt(Activity::price)); // 输出排序结果 System.out.println("===== 排序后结果 ====="); for (int i = 0; i < activityList.size(); i++) { System.out.printf("第%d名(价格:%d):\n%s\n\n", i+1, activityList.get(i).price(), activityList.get(i).fullContent()); } } // 从活动内容中提取价格整数值 private static int extractPrice(String content) { Matcher matcher = PRICE_PATTERN.matcher(content); if (matcher.find()) { return Integer.parseInt(matcher.group(1)); } // 未匹配到价格的条目默认排到列表最后 return Integer.MAX_VALUE; } // 构造原始活动数据集 private static List<String> buildRawActivityList() { List<String> list = new ArrayList<>(); list.add("Indian Chess League 2021\nOnline (Play From Home)\nE Sports\nprice 99 onwards"); list.add("Weekly Chess Maha Muqabla\nOnline (Play From Home)\nE Sports\nprice 225 onwards"); list.add("Call of Duty Mobile Tournament\nOnline (Play From Home)\nE Sports\nprice 300 onwards"); list.add("Green 10KM Challenge – Get India`s Biggest Medal\nYour Place and Your Time: India\nE Sports\nprice 399"); list.add("Free Fire Solo And Squad (Bermuda)\nOnline (Play From Home)\nE Sports\nprice 100 onwards"); list.add("Johnson Call Of Duty Mobile Tournament\nOnline (Play From Home)\nE Sports\nprice 100 onwards"); list.add("Online Martial Arts Coaching for Kids at Home\nOnline Streaming\nMixed Martial Arts\nprice 1180 onwards"); list.add("Call of Duty Battle Royale In Aid Of Sightsavers\nOnline (Play From Home): India\nE Sports\nprice 100"); return list; } }
排序后输出结果(内容已翻译为中文)
- 价格99:
2021印度象棋联赛
线上(居家参赛)
电竞项目
报名费99起 - 价格100:
自由之火单/四人模式赛(百慕大地图)
线上(居家参赛)
电竞项目
报名费100起 - 价格100:
约翰逊杯使命召唤手游联赛
线上(居家参赛)
电竞项目
报名费100起 - 价格100:
助力Sightsavers公益使命召唤大逃杀赛
线上(居家参赛):印度赛区
电竞项目
报名费100 - 价格225:
每周象棋超级挑战赛
线上(居家参赛)
电竞项目
报名费225起 - 价格300:
使命召唤手游联赛
线上(居家参赛)
电竞项目
报名费300起 - 价格399:
绿色10公里挑战赛——赢取印度最大尺寸奖牌
时间地点自定:印度全境可参与
电竞项目
报名费399 - 价格1180:
儿童居家线上武术课程
线上直播授课
综合武术类
报名费1180起
内容的提问来源于stack exchange,提问作者User3323334
相关产品推荐
相关产品推荐

