Java多命令行字符串传入Strcov类处理问题求助
问题:修改Java程序处理多个命令行字符串的大小写转换
我是Java新手,此前完成了读取单个命令行字符串,根据首字符将整个字符串转换为大写或小写的程序。现在需要修改为读取多个命令行字符串,并传入Strcov类处理,但由于变量类型从String变为String[],我不知道该如何修改Strcov类。以下是原有可运行代码和我尝试修改的错误代码:
原有可运行代码
class Strcov{ static String toULCase(String str) { //Converting string into ASCII value char word = str.charAt(0); int ascii = word; //If string start with uppercase, then the whole string turn to uppercase //[65,90] is the range for uppercase letter in ASCII if(ascii<=90 && ascii >= 65) { str = str.toUpperCase(); } //If string start with lowercase, then the whole string turn to lowercase //[97,122]is the range for lowercase letter in ASCII else if(ascii<=122&& ascii>=97) { str=str.toLowerCase(); } //If does not match, return string value as it is return str; } } public class Main { public static void main(String[] args) { Strcov obj= new Strcov(); String str= args[0]; System.out.print(obj.toULCase(str)); } }
尝试修改的错误代码
class Strcov{ static String toULCase(String str[]) { //Converting string into ASCII value char word = str.charAt(0); int ascii = word; //If string start with uppercase, then the whole string turn to uppercase //[65,90] is the range for uppercase letter in ASCII if(ascii<=90 && ascii >= 65) { str = str.toUpperCase(); } //If string start with lowercase, then the whole string turn to lowercase //[97,122]is the range for lowercase letter in ASCII else if(ascii<=122&& ascii>=97) { str=str.toLowerCase(); } //If does not match, return string value as it is return str; } } public class Main { public static void main(String[] args) { Strcov obj= new Strcov(); String str[]; for(int i =0; i<args.length; i++) { str[i]=args[i]; System.out.print(obj.toULCase(str[i])); } } }
错误分析与修改方案
错误点说明
- Strcov类方法逻辑错误:你把
toULCase的参数改成了String[],但代码里依然调用单个String的方法(比如charAt(0)、toUpperCase()),而字符串数组String[]没有这些方法,编译会直接报错。 - Main类数组未初始化:
String str[];仅声明了数组但未分配内存空间,直接执行str[i]=args[i]会抛出空指针异常。 - 方法调用类型不兼容:Main里调用
toULCase(str[i])传入的是单个String,但方法定义的参数是String[],类型不匹配。
方案一:复用原有Strcov方法(最简实现)
原有Strcov.toULCase已经能正确处理单个字符串,完全不需要修改它,只需要在Main类里遍历所有命令行参数,逐个传入该方法处理即可:
class Strcov{ static String toULCase(String str) { char word = str.charAt(0); int ascii = word; if(ascii<=90 && ascii >= 65) { str = str.toUpperCase(); } else if(ascii<=122&& ascii>=97) { str=str.toLowerCase(); } return str; } } public class Main { public static void main(String[] args) { // 遍历所有命令行参数 for(String arg : args) { // 静态方法无需创建对象,直接通过类名调用 System.out.print(Strcov.toULCase(arg) + " "); } } }
方案二:新增处理字符串数组的方法(批量处理场景)
如果希望Strcov类支持直接处理String[],可以新增一个静态方法,内部循环调用原有的单个字符串处理逻辑:
class Strcov{ static String toULCase(String str) { char word = str.charAt(0); int ascii = word; if(ascii<=90 && ascii >= 65) { str = str.toUpperCase(); } else if(ascii<=122&& ascii>=97) { str=str.toLowerCase(); } return str; } // 新增批量处理字符串数组的方法 static String[] toULCaseArray(String[] strs) { String[] result = new String[strs.length]; for(int i=0; i<strs.length; i++) { result[i] = toULCase(strs[i]); } return result; } } public class Main { public static void main(String[] args) { String[] processedArgs = Strcov.toULCaseArray(args); for(String str : processedArgs) { System.out.print(str + " "); } } }
内容的提问来源于stack exchange,提问作者shousan
相关产品推荐
相关产品推荐

