确定字符串中重复字符的位置,并在它们之间添加连字符

我知道有类似的问题已被提出,但没有答案足以满足我的目的。 我想编写一个程序,它接受一个字符串并将该字符串传递给一个方法。 一旦传递给方法,该方法将通过它搜索字符串并找到重复字符出现的位置并在它们之间添加连字符。 我只想使用java api中的charAt(),length()和/或substring()方法。 只是为了澄清,如果字符串“Hello”传递给我的方法,那么该方法将返回“Hel-lo”。 我在下面写了一些代码。

public class SeperateDuplicates { public static void main(String[] args) { System.out.println(seperateDuplicatesChars("Hello")); /*System.out.println(seperateDuplicatesChars("Bookkeeper")); System.out.println(seperateDuplicatesChars("Yellowwood door")); System.out.println(seperateDuplicatesChars("Chicago Cubs")); */ } public static String seperateDuplicatesChars(String str) { char[] arr = new char[str.length()]; for(int i = 0; i < arr.length; i++) { arr[i] = str.charAt(i); } int counter = 0; for(int i = 0; i < arr.length; i++) { counter++; if(arr[i] == arr[i+1]) { counter++; } } } 

}

如果您要求它修改String ,但Stringjava是可修改的,并且每次从中插入或删除字符时,都会创建一个新的字符串对象 。 这就是为什么在genral情况下,要创建新的字符串,你必须使用StringBuilder 。 您可以从此类的JavaDoc获取更多信息。

 public static String separateDuplicatesChars(String str) { if (str == null) return null; if (str.trim().isEmpty()) return str; char prv = '\0'; StringBuilder buf = new StringBuilder(str.length()); for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (prv == ch) buf.append('-'); buf.append(ch); prv = ch; } return buf.toString(); } 

或者仅使用length()charAt()substring()

 public static String separateDuplicatesChars(String str) { if (str == null) return null; int size = str.length(); int[] letters = new int[26]; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); char base = ch >= 'A' && ch <= 'Z' ? 'A' : ch >= 'a' && ch <= 'z' ? 'a' : '\0'; if (base == '\0') continue; int letter = str.charAt(i) - base; if (letters[letter] != 0) size++; letters[letter]++; } char[] arr = new char[size]; for (int i = 0, j = 0; i < str.length(); i++, j++) { char ch = str.charAt(i); if (i > 0 && arr[i - 1] == ch) arr[j++] = '-'; arr[j] = ch; } return new String(arr); } 

你很亲密 只需创建一个新的String,您将返回它,并在循环遍历char数组时构建它。 如果您需要添加连字符,只需添加连字符即可。