Java检查字符串中是否添加了内容

Java检查字符串中是否添加了内容,java,string,return,Java,String,Return,我定期检查从web服务获取的字符串是否更改。这很好,但是如果从我的方法触发器中删除了一个旧字符串,也可以。 例如: //I get this at the beginning "One,Two,Three" //And at the next check I get this "Two,Three" 所以字符串改变了,我的方法返回了true,就像它应该做的那样。 但我只想在字符串中添加例如“Four”时返回true 谁能给我一个解决这个问题的办法吗 多谢各位 冻结类似于 newString.

我定期检查从web服务获取的字符串是否更改。这很好,但是如果从我的方法触发器中删除了一个旧字符串,也可以。 例如:

//I get this at the beginning
"One,Two,Three"

//And at the next check I get this
"Two,Three"
所以字符串改变了,我的方法返回了true,就像它应该做的那样。 但我只想在字符串中添加例如“Four”时返回true

谁能给我一个解决这个问题的办法吗

多谢各位

冻结

类似于

newString.contains(oldString) && !newString.equals(oldString)

为什么不在字符串长度增加时触发呢?问题并不是说添加了什么很重要,而是是否添加了什么

boolean result = false;

if(newString.length() > oldString.length()) {
    result = true;
    break;
}

return result;
编辑:根据进一步的说明,我知道字符串的长度不是最好的指标,因为可以同时删除和添加某些内容,在这种情况下,OP希望返回
true
,即使长度更短。下面是一个将字符串拆分为标记的解决方案,然后检查旧字符串的最后一个标记是否出现在新字符串的最后一个标记之前,因为这意味着在它之后添加了一些内容:

boolean result = false;
String delim = ",";
String oldStringTokens[] = oldString.split(delim);
String newStringTokens[] = newString.split(delim);

for(int i = 0; i < newStringTokens.length; i++) {
    if(oldStringTokens[oldStringTokens.length-1].equals(newStringTokens[i])) {
        if(i < newStringTokens.length - 1) {
            result = true;
        }
    }
}

return result;
boolean结果=false;
字符串delim=“,”;
字符串oldStringTokens[]=oldString.split(delim);
字符串newStringTokens[]=newString.split(delim);
for(int i=0;i
也许你可以像这样使用
拆分

public class MyClass {
    public static void main(String args[]) {
        String oldString = "This,Is,A,Test";
        String[] oldItems = oldString.split(",");

        String newString = "This,Is,A,New";
        String[] newItems = newString.split(",");

        // For each new item, check all old items
        for (String newItem: newItems)
        {
            Boolean foundItem = false;
            for (String oldItem: oldItems)
            {
                // Item was already in the old items
                if (newItem.equals(oldItem))
                {
                    foundItem = true;
                    break;
                }
            }
            // New item is not in the old list of items
            if (!foundItem)
            {
                System.out.println("New item added: " + newItem);
            }
        }
    }
}

我不明白你的问题。你能说得更清楚一点吗?我得到字符串“1,2,3”,如果我在字符串中添加了一些内容,我想返回true,但当我删除一些内容时,我想返回true。所以:“一、二、三、四”//这将返回true“二、三、四”//这将返回true“四、五、六”//这将返回true“二、三”//这将返回false Java
字符串是不可变的,到底是如何向其中添加内容的?您可以测试引用是否更改<代码>a!=b
(这通常不是比较
String
实例的方式)。甚至
a.hashCode()!=b、 hashCode()
-这可能已经足够好了。它不是“添加的”。它基本上是一个新字符串,它可以比私有字符串包含更少、相同或更多的信息。@freezedhdh似乎您在这里有一个模式。始终有三个值,用逗号分隔。因此,您可以拆分字符串并检查其长度是否小于3。如果小于,则返回false。这不起作用<代码>“二,三”将不包含
“一,二,三”
您的想法的问题是新字符串不必包含旧字符串。我可以得到类似“四、五、六”的东西/不幸的是没有。这是因为如果添加了某些内容,我只想返回true。如果从字符串中删除某个内容,此解决方案也将返回true:,但新字符串不必比旧字符串长string@FreezedHD这应该是好的,,或者您有更多的测试用例:)但是如果从字符串中删除了某些内容,我不想返回true如果在最后一个项目之外的其他地方添加了一个项目,则更新后的答案将不起作用。改为查看我的答案。在几次澄清中,OP没有指出数据可以添加到字符串末尾以外的任何位置。这提供了较小的开销,但如果数据添加到其他位置,则当然不起作用。OP在其原始帖子的评论中澄清了这一点。但是是的,如果所有的新项目都添加到字符串的末尾,这种方法就可以了。从来没有想过使用for循环来比较这两个字符串。好主意。我要试试这个!
public class MyClass {
    public static void main(String args[]) {
        String oldString = "This,Is,A,Test";
        String[] oldItems = oldString.split(",");

        String newString = "This,Is,A,New";
        String[] newItems = newString.split(",");

        // For each new item, check all old items
        for (String newItem: newItems)
        {
            Boolean foundItem = false;
            for (String oldItem: oldItems)
            {
                // Item was already in the old items
                if (newItem.equals(oldItem))
                {
                    foundItem = true;
                    break;
                }
            }
            // New item is not in the old list of items
            if (!foundItem)
            {
                System.out.println("New item added: " + newItem);
            }
        }
    }
}