尝试编写一个使字符串成为altcase的代码(即。" hello"变成" HeLlO"。我从此论坛上的另一个问题中借用代码,要求类似的东西( Java Case Switcher)但是,代码只切换了一个字母的大小写,而不是大写字母(第一个),然后是小写字母等模式。
到目前为止我所拥有的:
public String altCase(String text)
{
String str = "";
for (int i = 0; i <= text.length(); i++)
{
char cA = text.charAt(i);
if (text.charAt(0).isUppercase)
{
str += Character.toLowerCase(cA);
}
if (text.charAt(0).isLowercase)
{
str += Character.toUpperCase;
}
if(i != 0 && Character.isUpperCase(cA))
{
if (text.charAt(i)-1.isUpperCase || text.charAt(i)+1.isUpperCase)
{
str += Character.toLowerCase(cA);
}
else
{
str += cA;
}
}
if(i != 0 && Character.isLowerCase(cA))
{
if (text.charAt(i)-1.isLowerCase || text.charAt(i)+1.isLowerCase)
{
str += Character.toUpperCase(cA);
}
else
{
str += cA;
}
}
}
return str;
}
我对编码总体上仍然比较新,所以请原谅我的低效率,以及由于缺乏编码经验而可能引起的任何麻烦。我不知道我哪里出错了,除非我输入&#34; text.charAt(i)-1.isLowerCase&#34;因为这句话看起来有点不合逻辑,但我在试图想出其他可以完成同样事情的事情上却迷失了方向。或者我的错误完全在别处?感谢您提前提供任何帮助。
答案 0 :(得分:1)
如果我真正明白你想得到的是:
获取一个字符串,以AbCdEfG ....等格式更改它。等等。
还有更简单的解决方案。 获取一个字符串并使用for循环,对于每个字符,根据字符串中的位置更改字符大小,对于i%2 == 0大写,i%2 == 1小写。
public String altCase(String text)
{
String str = "";
for (int i = 0; i < text.length(); i++)
{
char cA = text.charAt(i);
if (i%2 == 0)
{
str += Character.toUpperCase(cA);
}
else
{
str += Character.toLowerCase(cA);
}
}
return str;
}
答案 1 :(得分:1)
modulus operator可能会带你走很远的路......
StringBuilder rslt = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
switch (i % 2) {
case 0:
rslt.append(Character.toUpperCase(c));
break;
case 1:
rslt.append(Character.toLowerCase(c));
break;
}
}
return rslt.toString();
答案 2 :(得分:0)
我会从text.toLowerCase()
的{{3}}(可变字符序列)开始;然后将偶数索引处的字符设置为它们的大写等值(并且您的方法似乎不依赖于实例状态,因此它可能是static
)。像,
public static String altCase(String text) {
StringBuilder sb = new StringBuilder(text.toLowerCase());
for (int i = 0; i < text.length(); i += 2) {
sb.setCharAt(i, Character.toUpperCase(sb.charAt(i)));
}
return sb.toString();
}
答案 3 :(得分:0)
IntStream.range(0, s.length()).mapToObj(i -> i % 2 == 0 ?
Character.toUpperCase(s.charAt(i)) :
Character.toLowerCase(s.charAt(i)))
.map(String::valueOf)
.collect(Collectors.joining());