黑马程序员技术交流社区
标题:
字符数组的值能重新赋值吗?
[打印本页]
作者:
just_nnnnx
时间:
2014-1-5 11:23
标题:
字符数组的值能重新赋值吗?
class Test
{
public static void main(String[] args)throws IOException
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String str = bufr.readLine();
String s = change(str);
System.out.println(s);
}
public static String change(String str)
{
StringBuilder sb = new StringBuilder();
char[] chs = str.toCharArray();
for(char c : chs)
{
if(c>='a' && c<='z')
//sb.append(String.valueOf(c).toUpperCase());
//sb.append(Character.toString(c).toUpperCase());
c = Character.toUpperCase(c);
//sb.append(String.valueOf(c));
if(c>='A' && c<='Z')
//sb.append(String.valueOf(c).toLowerCase());
//sb.append(Character.toString(c).toLowerCase());
c = Character.toLowerCase(c);
//sb.append(String.valueOf(c));
}
//return sb.toString();
return new String(chs);
}
}
复制代码
如上,现在的代码运行的话,大小写是转换不了的,如果换成注释的内容,就可以,现在疑惑的是,为什么现在不行呢,是因为字符数组里字符的值不能重新赋值吗?
作者:
李兴
时间:
2014-1-5 12:06
修改后的代码如下
public static void main(String[] args)throws IOException
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String str = bufr.readLine();
String s = change(str);
System.out.println(s);
}
public static String change(String str)
{
StringBuilder sb = new StringBuilder();
char[] chs = str.toCharArray();
for(char c : chs)
{
if(c>='a' && c<='z')
//sb.append(String.valueOf(c).toUpperCase());
//sb.append(Character.toString(c).toUpperCase());
//c = Character.toUpperCase(c);
/*因为c为增强型for循环的迭代变量,是不能对他进行赋值的修改操作的,
只能得到当前他所表示的值*/
sb.append(Character.toUpperCase(c)); //改成这样也可以
//sb.append(String.valueOf(c));
if(c>='A' && c<='Z')
//sb.append(String.valueOf(c).toLowerCase());
//sb.append(Character.toString(c).toLowerCase());
//c = Character.toLowerCase(c);
sb.append(Character.toLowerCase(c));
//sb.append(String.valueOf(c));
}
return sb.toString(); //这也要改过来
//return new String(chs);
}
复制代码
作者:
李兴
时间:
2014-1-5 12:17
这又是另一种改法
public static void main(String[] args)throws IOException
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String str = bufr.readLine();
String s = change(str);
System.out.println(s);
}
public static String change(String str)
{
//StringBuilder sb = new StringBuilder();
char[] chs = str.toCharArray();
for(int i=0;i<chs.length;i++)
{
if(chs[i]>='a' && chs[i]<='z'){ //加个括号,因为加了个break;语句是多条
//sb.append(String.valueOf(c).toUpperCase());
//sb.append(Character.toString(c).toUpperCase());
chs[i] = Character.toUpperCase(chs[i]);
break; //加上break防止这样的情况发生:'a'-->'A',进入后面的if循环又将'A'-->'a'转化回来了
//sb.append(String.valueOf(c));
}
if(chs[i]>='A' && chs[i]<='Z'){ //加个括号,因为加了个break;语句是多条
//sb.append(String.valueOf(c).toLowerCase());
//sb.append(Character.toString(c).toLowerCase());
chs[i] = Character.toLowerCase(chs[i]);
break; //这个break;可加可不加
//sb.append(String.valueOf(c));
}
}
//return sb.toString();
return new String(chs);
}
复制代码
作者:
李兴
时间:
2014-1-5 12:20
或者这样改
将两个if语句,改为if。。elseif语句
public static void main(String[] args)throws IOException
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String str = bufr.readLine();
String s = change(str);
System.out.println(s);
}
public static String change(String str)
{
//StringBuilder sb = new StringBuilder();
char[] chs = str.toCharArray();
for(int i=0;i<chs.length;i++)
{
if(chs[i]>='a' && chs[i]<='z')
//sb.append(String.valueOf(c).toUpperCase());
//sb.append(Character.toString(c).toUpperCase());
chs[i] = Character.toUpperCase(chs[i]);
//sb.append(String.valueOf(c));
else if(chs[i]>='A' && chs[i]<='Z')
//sb.append(String.valueOf(c).toLowerCase());
//sb.append(Character.toString(c).toLowerCase());
chs[i] = Character.toLowerCase(chs[i]);
//sb.append(String.valueOf(c));
}
//return sb.toString();
return new String(chs);
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2