如何从带参构造器获取数据?Java代码实现咨询
Hey,我来帮你搞定这段代码的修改问题!你的核心需求是把字符串拆分的逻辑从split换成调用自定义的StringTokenizer(String str)构造器,同时修复print方法里的调用错误对吧?下面一步步来改:
1. 先修改
arr方法,替换成自定义构造器获取数据 首先,你的StringTokenizer带参构造器会通过成员变量data提供String[]类型的拆分结果,那我们只需要在arr方法里实例化这个类,然后取出它的data变量就行:
public String[] arr(String str){ // 实例化自定义的StringTokenizer,传入要拆分的字符串 StringTokenizer tokenizer = new StringTokenizer(str); // 从构造器初始化的实例中获取拆分后的数组data String[] tokens = tokenizer.data; return tokens; }
注意:这里默认你的StringTokenizer类把拆分结果存在了公共的成员变量data里,如果是私有变量,记得给它加个getter方法比如getTokens()来获取数据哦!
2. 修复
print方法的调用错误 原来的print方法里arr()是无参调用,但你的arr方法需要传入一个String参数,这里有两种常见的解决方式:
方案A:给print方法加参数,直接传入要处理的字符串
这种方式最直接,适合每次打印不同字符串的场景:
public void print(String str){ // 把要处理的字符串传给arr方法,拿到拆分后的tokens String[] tokens = arr(str); int size = tokens.length; for(int i=0;i<size;i++){ System.out.print(tokens[i]); } }
方案B:用类的成员变量存储字符串,实现无参调用
如果你的类是用来处理固定字符串的,可以先把字符串存在成员变量里,这样arr和print都可以改成无参:
// 先在类里加一个成员变量存储要处理的字符串 private String targetStr; // 给你的类加个构造器,初始化这个字符串 public YourClassName(String str){ this.targetStr = str; } // 修改arr方法为无参,直接用成员变量 public String[] arr(){ StringTokenizer tokenizer = new StringTokenizer(targetStr); return tokenizer.data; } // 现在print方法就可以无参调用arr了 public void print(){ String[] tokens = arr(); int size = tokens.length; for(int i=0;i<size;i++){ System.out.print(tokens[i]); } }
小提醒:避免和JDK自带类混淆
Java本身有个java.util.StringTokenizer类,功能和你的自定义类类似但用法不同,为了避免混淆,建议把你的自定义类改个名字,比如MyStringTokenizer,这样代码可读性会更高哦!
内容的提问来源于stack exchange,提问作者Yuuta
相关产品推荐
相关产品推荐

