字符串中的元音计数器已替换 Java
Vowel Counter Replaced in String Java
我想知道如何修复我的元音计数器程序,我搜索了很多论坛但都没有成功。实验室的描述是 "change all of the vowels in the String to numbers. Make sure the numbers range from 0-9 and that you reset the number to 0 when you get to a count > 9." 所以示例输入将是 "abcdef" 并且示例输出将是“0bcd1f.”
我的主要代码是
public class VowelCounter
{
public static String getNumberString(String s)
{
int counter = 0;
for(int i = 0; i<s.length(); i++)
{char g = s.charAt(i);
if(g =='a')
{
counter++;
s.replace(g,counter);
}
else if(g =='e')
{
counter++;
s.replace(g,counter);
}
else if(g =='i')
{
counter++;
s.replace(g,counter);
}
else if(g =='o')
{
counter++;
s.replace(g,counter);
}
else if(g =='u')
{
counter++;
s.replace(g,counter);
}
else if(g =='A')
{
counter++;
s.replace(g,counter);
}
else if(g =='E')
{
counter++;
s.replace(g,counter);
}
else if(g =='I')
{
counter++;
s.replace(g,counter);
}
else if(g =='O')
{
counter++;
s.replace(g,counter);
}
else if(g =='U')
{
counter++;
s.replace(g,counter);
}
}
return s;
}
}
亚军Class是
public class VowelCounterRunner
{
public static void main ( String[] args )
{
System.out.println( VowelCounter.getNumberString("abcdef") );
System.out.println( VowelCounter.getNumberString("hhhhhhh") );
System.out.println( VowelCounter.getNumberString("aaaaaaa") );
System.out.println( VowelCounter.getNumberString("catpigdatrathogbogfrogmoosegeese") );
System.out.println( VowelCounter.getNumberString("hhhhhhh1234356HHHHDH") );
System.out.println( VowelCounter.getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj") );
System.out.println( VowelCounter.getNumberString("") );
System.out.println( VowelCounter.getNumberString("x") );
System.out.println( VowelCounter.getNumberString("e") );
}
}
我遇到的错误与替换方法有关。它说“没有找到适合 replace(char,int) 的方法,方法 java.lang.String.replace(char,char) 不适用;(参数不匹配;从 int 到 char 的可能有损转换)
这是我的第一个编程 class,所以老实说我不知道如何解决这个问题。
JavaString
is immutable, and you aren't assigning the result of replace
(but I would prefer a StringBuilder
, because it is mutable). Next, using a switch
is, again in my opinion, easier to read here. As is a for-each
loop。把它们放在一起,它可能看起来像
public static String getNumberString(String s) {
if (s == null || s.isEmpty()) {
return "";
}
StringBuilder sb = new StringBuilder(s.length());
int counter = 0;
for (char ch : s.toCharArray()) {
switch (Character.toLowerCase(ch)) {
case 'a': case 'e': case 'i': case 'o': case 'u':
sb.append(counter);
counter++;
if (counter > 9) {
counter = 0;
}
break;
default:
sb.append(ch);
}
}
return sb.toString();
}
您正在用 int 值调用替换 - java 不会自动将此 int 转换为字符。您需要将 int 显式转换为人类可读的字符。这是一个快速而肮脏的修复:
将所有 s.replace
调用更改为
s = s.replace(g,(counter+"").charAt(0));
您会发现您的代码中仍然存在其他问题,即使替换已修复。应该工作的代码:
s = s.substring(0,i) + counter + s.substring(i);
不需要显式转换 int 值的原因是连接运算符 (+
) 会为您将其转换为文本。
总结:
在Java中,类型不是简单的混合——int != char
,你必须告诉编译器你希望它如何转换
s.replace
不会导致 s
中的任何内容发生变化,您需要将 s
设置为 s.replace
的结果 - 有点难刚开始的时候要全神贯注,但你会通过练习得到它
s.replace
将用相同的东西替换该字符串中字母的所有实例,我认为你不想要
编译错误为您提供了线索(请参阅有关 replace 方法的 javadocs)。您正在尝试使用整数来替换字符,您需要做的是将元音替换为数字的字符值,例如“1”或“2”等。
此外,对字符串调用替换将 return 字符串的新副本,因此即使您调用替换,也不会获得预期的效果。在这里想想有点不同(数组、StringBuffers 等)
给你,
import java.util.*;
import java.lang.*;
class Rextester
{
public static final int ASCII_0 = 48;
public static String getNumberString(String s)
{
int counter = 0;
for(int i = 0; i<s.length(); i++)
{
char g = Character.toLowerCase(s.charAt(i));
if(g =='a' || g =='e' || g =='i' || g =='o' || g =='u')
{
StringBuilder sb = new StringBuilder(s);
sb.setCharAt(i, (char) (counter + ASCII_0));
s = sb.toString();
counter = (counter + 1) % 10;
}
}
return s;
}
public static void main(String args[])
{
System.out.println( getNumberString("abcdef") );
System.out.println( getNumberString("hhhhhhh") );
System.out.println( getNumberString("aaaaaaa") );
System.out.println( getNumberString("catpigdatrathogbogfrogmoosegeese") );
System.out.println( getNumberString("hhhhhhh1234356HHHHDH") );
System.out.println( getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj") );
System.out.println( getNumberString("") );
System.out.println( getNumberString("x") );
System.out.println( getNumberString("e") );
}
}
将给出 out-put
0bcd1f
hhhhhhh
0123456
c0tp1gd2tr3th4gb5gfr6gm78s9g01s2
hhhhhhh1234356HHHHDH
0123456789878780lkjd1slwl2jrl3jfl4wjkflwj
x
0
也请看看我的实验:http://rextester.com/CEIUP1959
我想知道如何修复我的元音计数器程序,我搜索了很多论坛但都没有成功。实验室的描述是 "change all of the vowels in the String to numbers. Make sure the numbers range from 0-9 and that you reset the number to 0 when you get to a count > 9." 所以示例输入将是 "abcdef" 并且示例输出将是“0bcd1f.”
我的主要代码是
public class VowelCounter
{
public static String getNumberString(String s)
{
int counter = 0;
for(int i = 0; i<s.length(); i++)
{char g = s.charAt(i);
if(g =='a')
{
counter++;
s.replace(g,counter);
}
else if(g =='e')
{
counter++;
s.replace(g,counter);
}
else if(g =='i')
{
counter++;
s.replace(g,counter);
}
else if(g =='o')
{
counter++;
s.replace(g,counter);
}
else if(g =='u')
{
counter++;
s.replace(g,counter);
}
else if(g =='A')
{
counter++;
s.replace(g,counter);
}
else if(g =='E')
{
counter++;
s.replace(g,counter);
}
else if(g =='I')
{
counter++;
s.replace(g,counter);
}
else if(g =='O')
{
counter++;
s.replace(g,counter);
}
else if(g =='U')
{
counter++;
s.replace(g,counter);
}
}
return s;
}
}
亚军Class是
public class VowelCounterRunner
{
public static void main ( String[] args )
{
System.out.println( VowelCounter.getNumberString("abcdef") );
System.out.println( VowelCounter.getNumberString("hhhhhhh") );
System.out.println( VowelCounter.getNumberString("aaaaaaa") );
System.out.println( VowelCounter.getNumberString("catpigdatrathogbogfrogmoosegeese") );
System.out.println( VowelCounter.getNumberString("hhhhhhh1234356HHHHDH") );
System.out.println( VowelCounter.getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj") );
System.out.println( VowelCounter.getNumberString("") );
System.out.println( VowelCounter.getNumberString("x") );
System.out.println( VowelCounter.getNumberString("e") );
}
}
我遇到的错误与替换方法有关。它说“没有找到适合 replace(char,int) 的方法,方法 java.lang.String.replace(char,char) 不适用;(参数不匹配;从 int 到 char 的可能有损转换) 这是我的第一个编程 class,所以老实说我不知道如何解决这个问题。
JavaString
is immutable, and you aren't assigning the result of replace
(but I would prefer a StringBuilder
, because it is mutable). Next, using a switch
is, again in my opinion, easier to read here. As is a for-each
loop。把它们放在一起,它可能看起来像
public static String getNumberString(String s) {
if (s == null || s.isEmpty()) {
return "";
}
StringBuilder sb = new StringBuilder(s.length());
int counter = 0;
for (char ch : s.toCharArray()) {
switch (Character.toLowerCase(ch)) {
case 'a': case 'e': case 'i': case 'o': case 'u':
sb.append(counter);
counter++;
if (counter > 9) {
counter = 0;
}
break;
default:
sb.append(ch);
}
}
return sb.toString();
}
您正在用 int 值调用替换 - java 不会自动将此 int 转换为字符。您需要将 int 显式转换为人类可读的字符。这是一个快速而肮脏的修复:
将所有 s.replace
调用更改为
s = s.replace(g,(counter+"").charAt(0));
您会发现您的代码中仍然存在其他问题,即使替换已修复。应该工作的代码:
s = s.substring(0,i) + counter + s.substring(i);
不需要显式转换 int 值的原因是连接运算符 (+
) 会为您将其转换为文本。
总结:
在Java中,类型不是简单的混合——
int != char
,你必须告诉编译器你希望它如何转换s.replace
不会导致s
中的任何内容发生变化,您需要将s
设置为s.replace
的结果 - 有点难刚开始的时候要全神贯注,但你会通过练习得到它s.replace
将用相同的东西替换该字符串中字母的所有实例,我认为你不想要
编译错误为您提供了线索(请参阅有关 replace 方法的 javadocs)。您正在尝试使用整数来替换字符,您需要做的是将元音替换为数字的字符值,例如“1”或“2”等。
此外,对字符串调用替换将 return 字符串的新副本,因此即使您调用替换,也不会获得预期的效果。在这里想想有点不同(数组、StringBuffers 等)
给你,
import java.util.*;
import java.lang.*;
class Rextester
{
public static final int ASCII_0 = 48;
public static String getNumberString(String s)
{
int counter = 0;
for(int i = 0; i<s.length(); i++)
{
char g = Character.toLowerCase(s.charAt(i));
if(g =='a' || g =='e' || g =='i' || g =='o' || g =='u')
{
StringBuilder sb = new StringBuilder(s);
sb.setCharAt(i, (char) (counter + ASCII_0));
s = sb.toString();
counter = (counter + 1) % 10;
}
}
return s;
}
public static void main(String args[])
{
System.out.println( getNumberString("abcdef") );
System.out.println( getNumberString("hhhhhhh") );
System.out.println( getNumberString("aaaaaaa") );
System.out.println( getNumberString("catpigdatrathogbogfrogmoosegeese") );
System.out.println( getNumberString("hhhhhhh1234356HHHHDH") );
System.out.println( getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj") );
System.out.println( getNumberString("") );
System.out.println( getNumberString("x") );
System.out.println( getNumberString("e") );
}
}
将给出 out-put
0bcd1f
hhhhhhh
0123456
c0tp1gd2tr3th4gb5gfr6gm78s9g01s2
hhhhhhh1234356HHHHDH
0123456789878780lkjd1slwl2jrl3jfl4wjkflwj
x
0
也请看看我的实验:http://rextester.com/CEIUP1959