黑马程序员技术交流社区

标题: 关于string类型的修改问题 [打印本页]

作者: 宋健    时间: 2013-3-11 21:53
标题: 关于string类型的修改问题
string类型为char类型的只读数组,请问如果我想修改string某一位该怎么做?
如string str="abcdefg",如果要将c改为h,如果不想给字符串重新赋值(产生内存垃圾),
该怎么做啊?
作者: wjs5943283    时间: 2013-3-11 21:57
string 本来就是不可变的  改变都会有内存垃圾 你可以stringbuilder
作者: luxun1912    时间: 2013-3-11 22:09
String可以看做是char类型的一个只读数组,只能取值,不能更改它的值。
要想改变字符串中的某一个元素,除了给这个字符串重新赋值之外,另一种方法就是将这个字符串转换成char类型的数组,
通过遍历char类型的这个数组,对其进行改变。
将字符串转换成char数组 用 ToCharArray()这个方法。
也可以尝试使用stringBuilder
作者: 熊薇    时间: 2013-3-13 09:23
可以使用ToCharAarry()方法,得到一个字符数组,修改这个数组的值,再重新构造一个字符串
  1. string input="Hello";
  2. char[] chars=input.ToCharArray();
  3. chars[0]='E';
  4. input=new string(chars); //调用string的构造方法,生成一个字符串,此时input为Eello
复制代码
需要指出的是,由于string是引用类型,所以“Hello”仍然存在,
作者: 黑马-蒋振军    时间: 2013-3-13 13:03
  1. class stringDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String str="abcdefg";
  6.                 char[] ch=str.toCharArray();
  7.                 for(int i=0;i<ch.length;i++)
  8.                 {
  9.                         if(ch[i]=='c')
  10.                         {
  11.                                 ch[i]='h';
  12.                         }
  13.                         System.out.println(ch[i]);
  14.                 }
  15.         }
  16. }
复制代码
还有楼上的方法名写错了,是toCharArray().
作者: 曾玉锋    时间: 2013-3-13 14:23
String类的不可变性:一旦在内存空间分配一块内存空间存储字符串,则该空间就固定了,不可对该内存空间进行修改。至于内存垃圾,可以重新给string 变量=新值,然后调用GC.Collect() 回收内存垃圾
作者: 秦二江    时间: 2013-3-14 18:19
//用新字符串接收
string tr = "abcdefg";
            char[] ch = tr.ToCharArray();
            string s = null;
            for (int i = 0; i < ch.Length; i++)
            {
                if (ch[i] == 'c')
                {
                    ch[i] = 'h';
                }
              
                s+=ch[i];
            }
           
            Console.WriteLine(s);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2