注意:我必须为此程序使用 StringTokenizer(用于作业)
我正在尝试获取此字符串“Java 编程”。说“J@v@~~~Progr@mming”。使用 StringTokenizer。
以下代码有两个问题...
- 我的第一个 StringTokenizer 在控制台上显示我需要的内容,但在末尾添加了一个不需要的额外“@”。
- 它不会获取我的字符串标记,因为它是“J@v@ Progr@mming”。应用第二个 StringTokenizer ,它将在有空格的地方添加“~~~”。
我缺少什么?我浏览了 Java 的 API 文档,但无法弄清楚。
import java.util.StringTokenizer;
public class StringToken {
private String token;
//Constructor with default text
public StringToken() {
token = "Java Programming.";
}
//Constructor with custom text
public StringToken(String newToken) {
token = newToken;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String encodeTokenA(String newToken){
StringTokenizer st = new StringTokenizer(newToken, "a");
while (st.hasMoreTokens()){
String token = st.nextToken();
System.out.format(token + "@");
}
return token;
}
public String encodeTokenB(String newToken){
StringTokenizer st = new StringTokenizer(newToken, " ");
while (st.hasMoreTokens()){
String token = st.nextToken();
System.out.format(token + "~~~");
}
return token;
}
}
public class TestStringToken {
public static void main(String[] args) {
StringToken test = new StringToken();
test.encodeTokenA(test.getToken());
test.encodeTokenB(test.getToken());
System.out.println(test.getToken());
}
}
最佳答案
您的代码中有两个主要缺陷。
首先,如果您仔细观察方法encodeTokenA(),
while (st.hasMoreTokens()){
String token = st.nextToken();
System.out.format(token + "~~~");
}
return token;
在这里,您在循环内格式化了 block 级字符串“token”,但最终返回实例变量“token”。
其次,在两个函数调用encodeTokenA() 和encodeTokenB() 之间,您期望修改String 对象。 记住字符串在java中是不可变的。
关于java - 如何使 StringTokenizer 正确替换字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763374/