A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋健 中级黑马   /  2013-3-11 21:53  /  2231 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

string类型为char类型的只读数组,请问如果我想修改string某一位该怎么做?
如string str="abcdefg",如果要将c改为h,如果不想给字符串重新赋值(产生内存垃圾),
该怎么做啊?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

6 个回复

倒序浏览
string 本来就是不可变的  改变都会有内存垃圾 你可以stringbuilder

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
宋健 + 3
张文 + 1

查看全部评分

回复 使用道具 举报
String可以看做是char类型的一个只读数组,只能取值,不能更改它的值。
要想改变字符串中的某一个元素,除了给这个字符串重新赋值之外,另一种方法就是将这个字符串转换成char类型的数组,
通过遍历char类型的这个数组,对其进行改变。
将字符串转换成char数组 用 ToCharArray()这个方法。
也可以尝试使用stringBuilder

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
宋健 + 3
张文 + 1

查看全部评分

回复 使用道具 举报
可以使用ToCharAarry()方法,得到一个字符数组,修改这个数组的值,再重新构造一个字符串
  1. string input="Hello";
  2. char[] chars=input.ToCharArray();
  3. chars[0]='E';
  4. input=new string(chars); //调用string的构造方法,生成一个字符串,此时input为Eello
复制代码
需要指出的是,由于string是引用类型,所以“Hello”仍然存在,

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
  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().

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
String类的不可变性:一旦在内存空间分配一块内存空间存储字符串,则该空间就固定了,不可对该内存空间进行修改。至于内存垃圾,可以重新给string 变量=新值,然后调用GC.Collect() 回收内存垃圾

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
//用新字符串接收
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);

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马