Java String Buffer - 如何删除
Java String Buffer - how to delete
我需要创建一个方法,它接受一个字符串并生成一个不包含元音的新单词,并用每个辅音在原始单词中的位置替换它。我使用的单词是 "program"
所以我应该返回 "12o457"
.
下面是我的代码 - 当我尝试使用 deleteCharAt
时出现了越界,但我可以在这里使用追加。
public class Methods {
public String getWord(String word){
StringBuffer sb = new StringBuffer();
for(int i=0; i<word.length(); i++)
{
if(word.charAt(i) =='a' ||
word.charAt(i) == 'e' ||
word.charAt(i) == 'i')
{
sb.deleteCharAt(i);
}
else if(word.charAt(i)=='o' || word.charAt(i)=='u')
{
sb.append(word.charAt(i));
}
else{sb.append((i));}
}
return sb.toString();
}
}
嗯,你不需要为 StringBuilder 使用方法 deleteCharAt(i)
,因为它默认是空的,你只添加你想要的字符,而且 Strings
中的索引从 0 开始,所以你需要为辅音的位置追加 (i+1)
public static String getWord(String word) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == 'o' || word.charAt(i) == 'u') {
sb.append(word.charAt(i));
} else if (!(word.charAt(i) == 'a' ||
word.charAt(i) == 'e' ||
word.charAt(i) == 'i')) {
sb.append((i + 1));
}
}
return sb.toString();
}
String string="how are you?";
string.replaceall("[a|e|o|i|u]","*");
while(string.contains("*")){
string.replaceFirst("*",string.indexOf("*")+1);
}
这会起作用:)
您正试图删除您的 StringBuilder 中从未有过的字符,您只需按如下方式更改您的方法:
public String getWord(String word) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == 'o' || word.charAt(i) == 'u') {
sb.append(word.charAt(i));
} else if (word.charAt(i) != 'a' && word.charAt(i) != 'e' && word.charAt(i) != 'i') {
sb.append((i + 1));
}
}
return sb.toString();
}
这样你只添加你想要的字母例如 o
和 u
并跳过 a
, e
, i
元音和所有辅音.此外,Java 中的索引从 0
开始,因此,要获得所需的输出,您需要附加 i + 1
而不仅仅是 i
.
在运行上面的代码之后我得到:
12o457
符合预期。但是,您应该改写您的问题,因为您不需要任何元音字母,并且要添加 o
和 u
元音字母。你想要原来的位置,所以它不是 i + 1
而是 i
它会给你:
01o346
然而,对于更大的词,这可能会给出如下内容:
Input: programprogram
Output: 12o45789o111214
如您所见,它变得凌乱了。希望您不会使用长度超过 10 个字符的单词。
编辑
我也没有注意到这一点,但正如@PeterLawrey 在他的 above, don't use String Buffer
instead use a String Builder
. For more information about this, see StringBuilder vs StringBuffer
中所说的那样
我需要创建一个方法,它接受一个字符串并生成一个不包含元音的新单词,并用每个辅音在原始单词中的位置替换它。我使用的单词是 "program"
所以我应该返回 "12o457"
.
下面是我的代码 - 当我尝试使用 deleteCharAt
时出现了越界,但我可以在这里使用追加。
public class Methods {
public String getWord(String word){
StringBuffer sb = new StringBuffer();
for(int i=0; i<word.length(); i++)
{
if(word.charAt(i) =='a' ||
word.charAt(i) == 'e' ||
word.charAt(i) == 'i')
{
sb.deleteCharAt(i);
}
else if(word.charAt(i)=='o' || word.charAt(i)=='u')
{
sb.append(word.charAt(i));
}
else{sb.append((i));}
}
return sb.toString();
}
}
嗯,你不需要为 StringBuilder 使用方法 deleteCharAt(i)
,因为它默认是空的,你只添加你想要的字符,而且 Strings
中的索引从 0 开始,所以你需要为辅音的位置追加 (i+1)
public static String getWord(String word) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == 'o' || word.charAt(i) == 'u') {
sb.append(word.charAt(i));
} else if (!(word.charAt(i) == 'a' ||
word.charAt(i) == 'e' ||
word.charAt(i) == 'i')) {
sb.append((i + 1));
}
}
return sb.toString();
}
String string="how are you?";
string.replaceall("[a|e|o|i|u]","*");
while(string.contains("*")){
string.replaceFirst("*",string.indexOf("*")+1);
}
这会起作用:)
您正试图删除您的 StringBuilder 中从未有过的字符,您只需按如下方式更改您的方法:
public String getWord(String word) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == 'o' || word.charAt(i) == 'u') {
sb.append(word.charAt(i));
} else if (word.charAt(i) != 'a' && word.charAt(i) != 'e' && word.charAt(i) != 'i') {
sb.append((i + 1));
}
}
return sb.toString();
}
这样你只添加你想要的字母例如 o
和 u
并跳过 a
, e
, i
元音和所有辅音.此外,Java 中的索引从 0
开始,因此,要获得所需的输出,您需要附加 i + 1
而不仅仅是 i
.
在运行上面的代码之后我得到:
12o457
符合预期。但是,您应该改写您的问题,因为您不需要任何元音字母,并且要添加 o
和 u
元音字母。你想要原来的位置,所以它不是 i + 1
而是 i
它会给你:
01o346
然而,对于更大的词,这可能会给出如下内容:
Input: programprogram
Output: 12o45789o111214
如您所见,它变得凌乱了。希望您不会使用长度超过 10 个字符的单词。
编辑
我也没有注意到这一点,但正如@PeterLawrey 在他的 String Buffer
instead use a String Builder
. For more information about this, see StringBuilder vs StringBuffer