Java找到StringBuffer中字符之间的区别

Posted

技术标签:

【中文标题】Java找到StringBuffer中字符之间的区别【英文标题】:Java find difference between characters in 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取代了。 【参考方案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

【讨论】:

以上是关于Java找到StringBuffer中字符之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

全面解释java中StringBuilderStringBufferString类之间的关系

java之StringBuffer类

java中操作字符串都有哪些类?它们之间有什么区别?

Java常用类之StringBuffer与StringBuidler

分享知识-快乐自己:Java 中 的String,StringBuilder,StringBuffer三者的区别

初识Java语言- StringStringBuilder和 StringBuffer三者之间的区别和联系!!!建议收藏