用户输入字符串,转大小写,元音转大写,非元音转小写,要考虑到string的不可变性的影响,不得使用集合数组等结构。
> 字符串大小写转换(元音转大写,非元音转小写)
> 限制条件:不得使用集合、数组等数据结构,需考虑 `String` 不可变性
**题目描述**
给定一个字符串,将其中的元音字母(`a e i o u`,不区分大小写)转换为大写字母,其余字符转换为小写字母。
要求:
1. 不能使用数组、集合等中间结构存储字符
2. 要考虑 `String` 在 Java 中是不可变对象的特性,不能频繁拼接产生大量中间对象
**示例**
输入:
```
Hello World
```
输出:
```
hEllO wOrld
```
1 个回答
如果无能为力,那就顺其自然。如果心无所待,那就随遇而安。林雷**考察点** 1. Java `String` 不可变性(每次修改都会产生新对象) 2. `StringBuilder` 或 `StringBuffer` 的高效字符处理 3. 字符与大小写转换的基础方法 4. 元音字母判断逻辑(区分/不区分大小写) **参考答案(Java)** ```java public class VowelCaseConverter { public static String convert(String input) { if (input == null) return null; StringBuilder sb = new StringBuilder(input.length()); for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); if (isVowel(c)) { sb.append(Character.toUpperCase(c)); } else { sb.append(Character.toLowerCase(c)); } } return sb.toString(); } private static boolean isVowel(char c) { char lower = Character.toLowerCase(c); return lower == 'a' || lower == 'e' || lower == 'i' || lower == 'o' || lower == 'u'; } public static void main(String[] args) { System.out.println(convert("Hello World")); // hEllO wOrld } } ``` **解析** * **String 不可变性**:不能直接修改原字符串,所以用 `StringBuilder` 来构造新字符串。 * **不使用数组/集合**:通过 `charAt()` 逐个字符判断并构建结果。 * **大小写转换**:用 `Character.toUpperCase()` / `Character.toLowerCase()`,而不是 `'a'-'A'` 这种 ASCII 偏移,保证多语言兼容性。 * **时间复杂度**:O(n) * **空间复杂度**:O(n)(结果字符串所占空间)发布于 2025-08-11 14:30 •IP属地 湖北举报评论收藏
公众号进入网站体验更佳

