java - 如何使 StringTokenizer 正确替换字母?

标签 java stringtokenizer

注意:我必须为此程序使用 StringTokenizer(用于作业)

我正在尝试获取此字符串“Java 编程”。说“J@v@~~~Progr@mming”。使用 StringTokenizer。

以下代码有两个问题...

  1. 我的第一个 StringTokenizer 在控制台上显示我需要的内容,但在末尾添加了一个不需要的额外“@”。
  2. 它不会获取我的字符串标记,因为它是“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/

相关文章:

java - 如何使用特殊字符& |和 Split() 方法中的⊕?

Java:通过构造函数初始化和通过静态方法初始化之间的区别?

java - 为什么 JUnit DataPoints 方法不适用于原语?

java - UsernameNotFoundException 在 spring boot 中抛出 403

java - 哪个java类可以用来打印java支持的所有语言?

Java 字符串标记器检查数字

java - 如果 csv 文件具有空值并且我们需要与上列相对应的数据,如何使用逗号分隔它?

java - 在java中以2个字符分隔符分割字符串

java - 分割逗号分隔的字符串并提取特定值

java - 如何比较从 StringTokenizer 中提取的字符串