尝试将字符串更改为altcase

时间:2016-11-13 03:20:55

标签: java for-loop char

尝试编写一个使字符串成为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;因为这句话看起来有点不合逻辑,但我在试图想出其他可以完成同样事情的事情上却迷失了方向。或者我的错误完全在别处?感谢您提前提供任何帮助。

4 个答案:

答案 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());