Java 如何使StringTokenizer正确替换字母?
注意:我必须为此程序使用StringTokenizer(它用于分配任务) 我试图得到这个字符串“Java编程”J@v@~~~Progr@mming.“使用StringTokenizer 我对以下代码有2个问题Java 如何使StringTokenizer正确替换字母?,java,stringtokenizer,Java,Stringtokenizer,注意:我必须为此程序使用StringTokenizer(它用于分配任务) 我试图得到这个字符串“Java编程”J@v@~~~Progr@mming.“使用StringTokenizer 我对以下代码有2个问题 我的第一个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());
}
}
为什么不只是:
String whatever = "Java Programming."
.replace('a', '@')
.replaceAll("\\s", "~~~");
为什么不只是:
String whatever = "Java Programming."
.replace('a', '@')
.replaceAll("\\s", "~~~");
代码中有两个主要缺陷 首先,如果仔细观察encodeTokenA()方法 在这里,您在循环中格式化了块级字符串“token”,但最终将返回实例变量“token”
其次,在您的两个函数调用encodeTokenA()和encodeTokenB()之间,您希望修改String对象记住字符串在java中是不可变的。代码中有两个主要缺陷 首先,如果仔细观察encodeTokenA()方法 在这里,您在循环中格式化了块级字符串“token”,但最终将返回实例变量“token” 其次,在您的两个函数调用encodeTokenA()和encodeTokenB()之间,您希望修改String对象记住字符串在java中是不可变的。
token
,它不会修改您的实例vartoken
(由@Ankur提到)
@sjr通过发布一个使用内置方法更简洁的概念,使这一切变得毫无意义
token
,它不会修改您的实例vartoken
(由@Ankur提到)
@sjr发布了一个使用内置方法更简洁的概念,使这一切变得毫无意义。为什么不直接使用字符串方法,比如
“Java编程”。替换(“,“~~~”)。替换('a','@')
?为什么要使用stringtokenizer?我认为没有必要那样做。您可以使用.replace('a','@'),我希望我可以使用其他东西,但它是用于赋值的,不幸的是,我们需要使用StringTokenizer。是为什么不直接使用字符串方法,比如“Java编程”。替换(“,“~~~”)。替换('a','@')
?为什么要使用stringtokenizer?我认为没有必要那样做。您可以只使用.replace('a','@')我希望我可以使用其他东西,但它是用于赋值的,不幸的是我们需要使用StringTokenizer。因此,我是否应该在一个方法中添加两个替换的标记以使其工作?这是用于赋值的,因此我需要使用StringTokenizer来实现……首先,您应该从方法encodeTokenA()返回格式化值,并将此格式化值传递给下一个方法(encodeTokenB())。但是,我仍然不确定您的格式化逻辑是否会产生预期的结果。但我提到的事情必须先做。然后检查您的格式化逻辑。那么我是否应该在一个方法中添加两个替换的令牌以使其工作?这是用于赋值的,因此我需要使用StringTokenizer来实现……首先,您应该从方法encodeTokenA()返回格式化值,并将此格式化值传递给下一个方法(encodeTokenB())。但是,我仍然不确定您的格式化逻辑是否会产生预期的结果。但我提到的事情必须先做。然后检查您的格式逻辑。请记住,该方法将regexp作为argumenttrue,有时人们不知道这些API的存在,但请记住,该方法将regexp作为argumenttrue,有时人们不知道这些API的存在