我需要帮助编写一个实用方法来读取字符串并返回仅包含字符的修改后的字符串。对于这个问题,我只允许使用 length、charAt 和 substring。
我的第一个想法是使用 for 循环遍历字符串,然后检查字符串中的每个字符是否具有与字母对应的 ASCII 十进制值。但是,我不确定是否有更简单的方法来做到这一点(可能有),并且我无法理解如何通过这种方法使用子字符串方法。任何帮助是极大的赞赏。这是到目前为止我的拙劣代码。
// Private helper method that strips out spaces and non-characters
// from a String
private static String charactersOnly(String str) {
// Iterates through string contents
for (int i = str.length() - 1; i < str.length(); i++) {
// 65-90 is decimal value for uppercase letters in ASCII
if ( (str.charAt(i) >= 65) && (str.charAt(i) <= 90) ) {
// TODO: add these letters to new string
}
// 97-122 is decimal value for lowercase letters in ASCII
if ( (str.charAt(i) >= 97) && (str.charAt(i) <= 122) ) {
// TODO: add these letters to new string
}
else {
// TODO: remove from string
}
}
return str; // adjusted str
}
由于这显然是一项家庭作业或类似的作业,我不会在这里发布完整的解决方案,但会尝试给您一些有价值的建议:
您可以决定使用
String.substring
或 String.charAt
,但不必同时使用两者。对于您在代码中展示的方法,charAt
就足够了。
您应该直接将
charAt
的结果与字符而不是数字进行比较。
示例:
if ((str.charAt(i) >= 'A') && (str.charAt(i) <= 'Z')) {
在
if
链中:您可以使用 else
嵌套 if
语句,并仅在字符不是大写字母时检查小写字母,或者保持原样。但根据您的评论,您应该 添加适合您结果的字符, 或 删除不需要的字符,但不能同时执行这两种操作。我建议添加所需的字母并删除当前的 else
声明。
您无法修改
String
,它是不可变,这意味着创建对象后您无法更改其属性。您可以将不同的对象分配给 str
,但为了提高代码的可读性,您不应该 return str;
,而应该创建一个 String result
。
根据您已经学到的知识,您可以使用
char
数组来存储初步结果并在最后一步中将其转换为 String
,或者使用 StringBuilder
获得类似于 String
的内容
您可以修改(添加必要的字符)。
如果您需要有关某个主题或另一个主题的更多详细信息,请随时询问,以便我更新此答案。