黑马程序员技术交流社区
标题:
今天碰到的疑问,谁来解答
[打印本页]
作者:
雀巢咖啡
时间:
2014-4-14 22:26
标题:
今天碰到的疑问,谁来解答
从键盘接收一个字符串,对字符串中的字母进行大小写互转。
我的代码如下:
import java.util.*;
public class test8 {
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);//输入流
String s=in.next();
for(int i=0;i<s.length();i++)
{
char c=s.charAt(i);
if(c>'A'&&c<'a')
{
c=(char)('a'+c-65);//将大写字母转换为小写字母
}
else if(c>='a')
{
c=(char)('A'+c-97);//将小写字母转换为大写字母
}
}
System.out.print(s);
}
我的循环部分明明已经对s中的字符进行了大小写转换,为何最后输出的s没变?(不要告诉我直接调用API提供的方法类库)。
}
作者:
luoanjade
时间:
2014-4-14 23:05
本帖最后由 luoanjade 于 2014-4-14 23:08 编辑
你的转换是没问题的,只是你循环里面的操作并没有改变原来的字符串,你只是改变了循环里面的c,你在循环里面打印一下c,你就知道你的变换是没有错的。那怎样把转变后的字符串返回来呢?我做了这样的操作:
import java.util.*;
public class test8 {
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);//输入流
String s=in.next();
StringBuffer sb = new StringBuffer(); //********加了这行代码********
for(int i=0;i<s.length();i++)
{
char c=s.charAt(i);
if(c>'A'&&c<'a')
{
c=(char)('a'+c-65);//将大写字母转换为小写字母
}
else if(c>='a')
{
c=(char)('A'+c-97);//将小写字母转换为大写字母
}
sb.append(c); //***********加了这行代码***********
复制代码
作者:
luoanjade
时间:
2014-4-14 23:11
回复好像有限制大小的,上面代码不完整,还有下面着两行:
}
s = sb.toString();
System.out.print(s);
}
}
复制代码
作者:
雀巢咖啡
时间:
2014-4-15 11:59
问题好像出在:String类的对象属于串常量,而串常量的值一旦建立就不会再变动。所以你创建了StringBuffer类的对象,这样创建串变量的值是可以改变的,我理解的对吧?
作者:
ithmC4
时间:
2014-4-15 13:44
我帮你改了改:
import java.util.*;
class MyMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
StringBuilder sb = new StringBuilder(in.next());//直接建立StringBuilder就行
//小知识点:如果循环判断条件不变的话,不要重复计算,会降低效率
for(int i=0, len=sb.length(); i<len; i++)
{
char c=sb.charAt(i);
if(c>'A'&&c<'a')
{
c=(char)('a'+c-65);
}
else if(c>='a')
{
c=(char)('A'+c-97);
}
sb.setCharAt(i, c);//将转换后的字符放替换进去
}
System.out.print(sb.toString());
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2