我有以下问题
给定一个字符串,返回一个“ cleaned”字符串,其中相同的相邻字符已减少为一个字符。如此"yyzzza"
产量"yza"
。
stringClean("yyzzza") → "yza"
stringClean("abbbcdd") → "abcd"
stringClean("Hello") → "Helo"
我正在尝试输入我的代码 stringClean("abbbcdd") → "abcd"
我的代码如下。在进行相邻字符比较之后,我得到了部分追加的字符串,因此截至目前,我得到的"sb=abc"
不是正确输出的追加的stringBuilder
我应该得到的输出为"abcd"
,
class cleanString{
public static String stringClean(String str){
int startIndex = str.indexOf(str);
char startChar = '\u0000';
char adjacentChar = '\u0000';
System.out.println("startIndex-->" + startIndex);
final StringBuilder sb = new StringBuilder();
for(startIndex = 0; startIndex < str.length(); startIndex += 1){
startChar = str.charAt(startIndex);
System.out.println("startIndex ::" + startIndex);
System.out.println("startChar ::" + startChar);
final int adjacentPosition = startIndex + 1;
System.out.println("adjacentPosition ::" + adjacentPosition);
if(adjacentPosition != str.length()){
adjacentChar = str.charAt(adjacentPosition);
System.out.println("adjacentChar ::" + adjacentChar);
}
if(startChar == adjacentChar){
System.out.println("startChar ::" + startChar);
System.out.println("adjacentChar::" + adjacentChar);
System.out.println("Before Substring string --->" + str);
str = str.substring(1);
startIndex--;
System.out.println("After Substring string --->" + str);
System.out.println("IndexOf check ---->"
+ sb.toString().indexOf(startChar));
if(sb.toString().indexOf(startChar) != -1){
sb.append(adjacentChar);
System.out.println("Appended String in if part-->"
+ sb.toString());
}
} else{
str = str.substring(1);
startIndex--;
sb.append(startChar);
System.out.println("Appended String --->" + sb.toString());
}
}// end of for loop
return sb.toString();
}
//im getting output as abc...which is partial appended string
public static void main(String ...args){
String outputCleanString=new cleanString().stringClean("abbbcdd");
System.out.println("Cleaned String --->"+outputCleanString);
}
}
对于您的代码和特定问题,您已经提到,如果相邻位置超出了字符串的边界,则将neighborChar设置为null
char,否则,neighborChar被视为字符串中的最后一个字符,这意味着未完成附加操作。
if(adjacentPosition != str.length()){
adjacentChar = str.charAt(adjacentPosition);
System.out.println("adjacentChar ::" + adjacentChar);
}
else {
adjacentChar = '/u0000';
}
编辑
我认为您提到的第二个问题是在这段代码中
if(sb.toString().indexOf(startChar) != -1){
sb.append(adjacentChar);
System.out.println("Appended String in if part-->"
+ sb.toString());
}
由于e和o在Hello的缓冲区中,因此在检查Bookkeeper时会附加它们。我认为您不需要该行,因此请将其删除,这应该可以解决Hello
Bookkeeper。
尽管Mohoamed的答案也可以。
问题内容: 我想将多个字符串相互比较,并找到最相似的字符串。我想知道是否有任何库,方法或最佳实践会返回我哪些字符串与其他字符串更相似的字符串。例如: “The quick fox jumped” -> “The fox jumped” “The quick fox jumped” -> “The fox” 该比较将返回第一个比第二个更相似。 我想我需要一些方法,例如: 某处有这样的东西吗? 编辑:
问题内容: 给我输出: 我不太了解第一行,为什么它会给我带来错误? 如果我在字符串2上添加空格,则此行为false,但如果不添加空格,则为true: 为什么第1行给我假,但第6行为真,但是如果我在string2上添加空格则为假。 谢谢=) 问题答案: 那里发生了几件事。 当您将两个字符串声明为相等的“ Hi”时,java将对其进行优化以引用相同的字符串对象(因此不必将相同的字符串存储两次)。 “
问题内容: “按字典顺序比较两个字符串”是什么意思? 问题答案: 从@Bozho和@aioobe的答案出发,字典比较类似于在字典中可能会发现的顺序。 Java String类提供了该方法以便按字典顺序比较String。这样使用。 此方法的返回int值可以解释如下: 返回<0,则调用该方法的String按字典顺序排在首位(在字典中排在首位) 返回== 0,则这两个字符串在字典上等效 返回> 0,然后
主要内容:equals() 方法,equalsIgnoreCase() 方法,equals()与==的比较,compareTo() 方法字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。 在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。 equals() 方法 equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相
我已经声明了一个实现可比较接口和compareTo方法的类,使用employee ID比较两个员工。创建的类对象插入数组列表。现在,当我使用collections.sort(arrayList对象)时,它工作得很好。我对collective和comparator接口之间的比较有何不同感到困惑。我想知道如何在纯粹由数字组成的employee id字符串和其他字符串employee id之间进行比较,
我的问题是这样问的:编写一个比较两个输入字符串的程序。输出每个字符串位置匹配的字符数。输出应根据字符数使用正确的动词(匹配与匹配)。 例如:如果输入是:粉碎崩溃 输出为:4个字符匹配 这就是我到目前为止所拥有的: 导入java.util.Scanner; 我知道这看起来并不多,但我已经尝试了很多其他方法,但我显然缺少一些可以让这更容易做到的东西。我想数一下柜台里类似的字母……但我不知道该怎么办。