Java 删除字符串中的重复项并创建新字符串
我是Java新手,正在尝试创建一种方法,该方法允许我删除字符串中的重复字符,并创建一个新字符串,将同一字符的所有连续出现转换为单个字符。例如,字符串Java 删除字符串中的重复项并创建新字符串,java,string,replace,duplicates,Java,String,Replace,Duplicates,我是Java新手,正在尝试创建一种方法,该方法允许我删除字符串中的重复字符,并创建一个新字符串,将同一字符的所有连续出现转换为单个字符。例如,字符串fffgghhh将返回为fgh。我已经在下面提供了我的代码,但是我收到了一个索引超出范围的错误,该错误与我输入的字符串的长度有关。例如,当测试此方法并输入AA作为我的字符串时,我收到一个索引超出范围2的错误 公共字符串重复测试(字符串s){ StringBuilder结果=新建StringBuilder(); 对于(inti=1;i字符串是基于0的索
fffgghhh
将返回为fgh
。我已经在下面提供了我的代码,但是我收到了一个索引超出范围的错误,该错误与我输入的字符串的长度有关。例如,当测试此方法并输入AA
作为我的字符串时,我收到一个索引超出范围2的错误
公共字符串重复测试(字符串s){
StringBuilder结果=新建StringBuilder();
对于(inti=1;i字符串是基于0的索引
根据您的输入,如果重复字符是连续的顺序,则可以将输入字符串中的第一个字符存储到结果StringBuilder中
另外,在您的代码中,prev总是以0开头,这是错误的。您也需要保持它的增量
以下是您的代码的固定版本:
public static String DuplicatesTEST(String s) {
StringBuilder result = new StringBuilder();
result.append(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
char prev = s.charAt(i);
char curr = s.charAt(i - 1);
if (curr != prev || i == 0) {
result.append(prev);
}
else if (curr == prev) {
prev = curr;
}
}
return result.toString();
}
公共静态字符串重复测试(字符串s){
StringBuilder结果=新建StringBuilder();
结果:追加(s.charAt(0));
对于(int i=1;i
字符串是基于0的索引
根据您的输入,如果重复字符是连续的顺序,则可以将输入字符串中的第一个字符存储到结果StringBuilder中
另外,在您的代码中,prev总是以0开头,这是错误的。您也需要保持它的增量
以下是您的代码的固定版本:
public static String DuplicatesTEST(String s) {
StringBuilder result = new StringBuilder();
result.append(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
char prev = s.charAt(i);
char curr = s.charAt(i - 1);
if (curr != prev || i == 0) {
result.append(prev);
}
else if (curr == prev) {
prev = curr;
}
}
return result.toString();
}
公共静态字符串重复测试(字符串s){
StringBuilder结果=新建StringBuilder();
结果:追加(s.charAt(0));
对于(int i=1;i
数据结构的行为集合
不包含重复项,因此使用集合
删除重复项。
试着这样做:
公共字符串重复测试(字符串s){
Set=newhashset();
StringBuilder结果=新建StringBuilder();
对于(int i=0;i
对于fffgghhhff
输入此返回值fgh
如果您想使用上面的块删除重复项解决方案没有帮助,那么我对您的实现做了一些小改动:
公共字符串重复测试(字符串s){
StringBuilder结果=新建StringBuilder();
如果(s!=null&&!s.isEmpty()){
char first=s.charAt(0);
对于(int i=1;i
对于FFFGGGHHFF
输入此返回值fghf
数据结构的行为Set
不包含重复项,因此使用Set
删除重复项。
试着这样做:
公共字符串重复测试(字符串s){
Set=newhashset();
StringBuilder结果=新建StringBuilder();
对于(int i=0;i
对于fffgghhhff
输入此返回值fgh
如果您想使用上面的块删除重复项解决方案没有帮助,那么我对您的实现做了一些小改动:
公共字符串重复测试(字符串s){
StringBuilder结果=新建StringBuilder();
如果(s!=null&&!s.isEmpty()){
char first=s.charAt(0);
对于(int i=1;i
对于FFFGGGHHFF
输入此返回值fghf
您可以将方法转换为递归并使用regexp。这大大简化了代码
publicstaticstringremoveduplicates(stringstr){
如果(str.equals(str=str.replaceAll(“(..\\1”),“$1”))
返回str;
其他的
返回移除的副本(str);
}
publicstaticvoidmain(字符串[]args){
System.out.println(移除的副本(“aaaaaaaaaaa”);//a
System.out.println(移除的副本(“fffgghh”);//fgh
System.out.println(移除的副本(“FFFGGGHHFF”);//fghf
}
说明:
- regexp
()\\1
-后跟相同字符的任何字符;
- regexp
$1
-替换为第一组中的一个字符,即相同的字符
str=str.replaceAll(…)
-删除所有重复项并替换当前字符串
str.equals(…)
-检查当前字符串与自身的相等性,但不重复
另请参见:您可以将方法转换为递归并使用regexp。这大大简化了代码
publicstaticstringremoveduplicates(stringstr){
如果(str.equals(str=str.replaceAll(“(..\\1”),“$1”))
返回str;
其他的
返回移除的副本(str);
}
publicstaticvoidmain(字符串[]args){
System.out.println(移除的副本(“aaaaaaaaaaa”);//a
System.out.p