【问题标题】:Java find difference between characters in StringBufferJava找到StringBuffer中字符之间的区别
【发布时间】:2016-02-21 13:27:33
【问题描述】:

我正在开发一个 Anagram 程序,我目前正在开发一个名为 diff 的方法,它应该返回一个 StringBuffer,其中包含第一个 StringBuffer 中但不在第二个。例如,如果 StringBuffers 是 abbaacca,那么我的 diff 方法应该返回 bb。到目前为止,我目前有一个带有 if 语句的循环,但它不起作用。任何帮助,将不胜感激。谢谢

public StringBuffer diff(){
    StringBuffer diffVal = null;

    for (int i =0; i < sBuffer1.length(); i++){
        String let1 = String.valueOf(sBuffer1);
        if (sBuffer2.indexOf(let1) == -1 ){

        }

    }
    return diffVal;

【问题讨论】:

  • 您正在比较转换为字符串的整个缓冲区。所以最好在循环中使用索引。检查每个字符,而不是整个缓冲区
  • 为什么StringBuffer 没有死并埋在学校里?
  • 请不要使用StringBuffer,因为它在十多年前被StringBuilder取代了。

标签: java string if-statement for-loop anagram


【解决方案1】:

我认为您正在尝试使用循环来逐个检查sBuffer1 中的一个字符。但是String let1 = String.valueOf(sBuffer1); 为您提供了sBuffer1 的整个字符串。

您需要String let1 = sBuffer1.substring(i, i + 1)sBuffer1 中获取单个字符以检查它是否存在于sBuffer2 中。

例如:

public static StringBuffer diff(StringBuffer sBuffer1, StringBuffer sBuffer2) {
    StringBuffer diffVal = new StringBuffer();

    for (int i = 0; i < sBuffer1.length(); i++) {
        String let1 = sBuffer1.substring(i, i + 1); // get the character from sBuffer1
        if (sBuffer2.indexOf(let1) == -1) {
            diffVal.append(let1); // append the character to the diff
        }
    }

    return diffVal;
}

【讨论】:

    【解决方案2】:

    好的,这可能有效,你的逻辑有点错误,这段代码是直截了当的。搜索第二个字符串缓冲区中不存在的字符,将其添加到结果 SF。

    public StringBuffer diff(){
            StringBuffer diffVal = new StringBuffer();//initialize before you use it.
    
            for (int i =0; i < sBuffer1.length(); i++){
                String let1 = String.valueOf(sBuffer1.charAt(i))//get the character at the ith position.
                if (sBuffer2.indexOf(let1) == -1 ){
                  diffVal.append(let1);
                }
    
            }
            return diffVal;
        }
    

    【讨论】:

      【解决方案3】:

      试试这个。

         StringBuilder diffVal= new StringBuilder();
      
                  StringBuffer sBuffer1 = new StringBuffer("abbad");//input 1
                  StringBuffer sBuffer2 = new StringBuffer("acca");//input 2, you can ignore if you have already passed/defined these
                  for (int i =0; i < sBuffer1.length(); i++){             
                     if(i >= sBuffer2.length()){//handles difference in input string length
                         diffVal.append(sBuffer1.substring(i, sBuffer1.length()));
                         break;
                     }
                  if (sBuffer1.charAt(i) != sBuffer2.charAt(i)) {
                      diffVal.append(sBuffer1.charAt(i));
                  }
      
                  }
                 System.out.println(diffVal);// I am printing it here
      

      输出是:bbd

      这里的一个建议是使用StringBuilder,如果你在这里使用的字符串不需要是synchronized

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-09
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 2014-09-23
        • 2014-06-17
        • 2013-07-27
        • 2011-06-15
        相关资源
        最近更新 更多