如何为字符串每个字符按顺序分配序号(非频率统计)
问题描述
现有字符串:
String s = "ZpglnRxqenU"
需要为字符串中的每个字符按出现顺序分配序号,示例输出如下:
z-1 p-2 g-3 l-4 n-5 r-6 x-7 q-8 e-9 n-10 u-11
需求并非统计字符频率,尝试用HashMap实现:
Map<String, Integer> map = new HashMap<>(); for (int i = 0; i < s.length(); i++) { map.put(String.valueOf(s.charAt(i)), i + 1); }
但由于Map的键具有唯一性,导致第一个n的记录被后续的n覆盖,请问该如何正确实现这种字符序号分配?
解决方案
方法1:直接遍历输出(最简单)
如果只是需要输出目标结果,完全不需要用Map,直接遍历字符串逐个输出即可:
String s = "ZpglnRxqenU"; for (int i = 0; i < s.length(); i++) { // 转小写匹配示例输出格式 char c = Character.toLowerCase(s.charAt(i)); System.out.println(c + "-" + (i + 1)); }
这段代码直接按顺序输出每个字符和对应序号,不会出现覆盖问题。
方法2:用Map存储所有出现的序号(需保存数据时)
如果需要持久化存储每个字符对应的所有序号,可以使用Map<Character, List<Integer>>,键为字符,值为该字符出现的所有序号列表:
String s = "ZpglnRxqenU"; // 使用LinkedHashMap保证字符顺序为首次出现的顺序 Map<Character, List<Integer>> charIndexMap = new LinkedHashMap<>(); for (int i = 0; i < s.length(); i++) { char c = Character.toLowerCase(s.charAt(i)); // 若字符未在Map中,自动创建空列表 charIndexMap.computeIfAbsent(c, k -> new ArrayList<>()); // 将当前序号加入列表 charIndexMap.get(c).add(i + 1); } // 遍历输出所有字符及对应序号 for (Map.Entry<Character, List<Integer>> entry : charIndexMap.entrySet()) { char c = entry.getKey(); for (int index : entry.getValue()) { System.out.println(c + "-" + index); } }
用LinkedHashMap替代普通HashMap,可以保证输出顺序和字符首次出现的顺序一致,完全匹配示例要求。
方法3:自定义对象存储(灵活扩展)
如果需要对字符和序号的配对进行更复杂的操作,可以创建一个简单的自定义类,用List保存所有配对:
// 自定义类,封装字符和对应的序号 class CharIndex { private char character; private int sequenceNumber; public CharIndex(char character, int sequenceNumber) { this.character = character; this.sequenceNumber = sequenceNumber; } // 重写toString方法,方便直接输出 @Override public String toString() { return character + "-" + sequenceNumber; } } // 使用示例 String s = "ZpglnRxqenU"; List<CharIndex> charIndexList = new ArrayList<>(); for (int i = 0; i < s.length(); i++) { char c = Character.toLowerCase(s.charAt(i)); charIndexList.add(new CharIndex(c, i + 1)); } // 输出所有配对 for (CharIndex pair : charIndexList) { System.out.println(pair); }
这种方式可以完整保留每一组字符和序号的信息,后续便于进行过滤、排序等操作。
内容的提问来源于stack exchange,提问作者IMBABOT
相关产品推荐
相关产品推荐

