string_stringbuffer - CSDN
string 订阅
string是C++、java、VB等编程语言中的字符串,字符串是一个特殊的对象,属于引用类型。 在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类对象。 C++标准库中string类以类型的形式对字符串进行封装,且包含了字符序列的处理操作。 [1-2] 展开全文
string是C++、java、VB等编程语言中的字符串,字符串是一个特殊的对象,属于引用类型。 在java、C#中,String类对象创建后,字符串一旦初始化就不能更改,因为string类中所有字符串都是常量,数据是无法更改,由于string对象的不可变,所以可以共享。对String类的任何改变,都是返回一个新的String类对象。 C++标准库中string类以类型的形式对字符串进行封装,且包含了字符序列的处理操作。 [1-2]
信息
所属领域
计算机
中文名
字符串
属    性
编程语言
外文名
String
string基本信息
String就是C++、java、VB等编程语言中的字符串,用双引号引起来的几个字符,如"Abc","一天".
收起全文
  • String类型

    2018-09-28 15:33:42
    String类型 一、相关概念 1.定义 String类型是字符串的对象包装类型 创建String对象 var stringObject=new String("hello world"); ...

    String类型

    一、相关概念

    1.定义

    1. String类型是字符串的对象包装类型
    2. 创建String对象
    var stringObject=new String("hello world");
    

    2.补充

    1. String对象大方法也可以在所有基本的字符串值中访问到
    2. 继承的valueOf()toLocaleString()toString()方法,都返回对象所表示的基本字符串值

    二、属性

    1.length

    1. String类型的每个实例都有一个length属性,表示字符串中包含多个字符
    2. 字符串中包含双字节字符(不是占一个字节的ASCII字符),每个字符仍然算一个字符
    var stringValue=new String("hello world");
    alert(stringValue.length);/"11"
    

    三、方法

    (一).字符方法

    1.charAt()
    1. 接收一个参数,基于0的字符位置
    2. 以单字符字符串的形式返回给定位置的哪个字符(ECMAScript中没有字符类型)
    var stringValue=new String("hello world");
    alert(stringValue.charAt(1));//"e"
    
    2.charCodeAt()
    1. 接收一个参数,基于0的字符位置
    2. 以单字符字符串的形式返回给定位置的哪个字符的字符编码
    var stringValue=new String("hello world");
    alert(stringValue.charCodeAt(1));//"101"
    
    3.方括号表示法
    1. 在支持的浏览器中,可以使用方括号加数字索引来访问字符串中的特定字符
    2. 使用方括号表示法访问个别字符的语法得到了IE8FirefoxSafariChromeOpera所有版本的支持
    3. 如果是在IE7及更早版本中使用这种语法,会返回undefined值(尽管根本不是特殊的undefined值)
    var stringValue=new String("hello world");
    alert(stringValue[1]);//"e"
    

    (二).字符串操作方法

    1.concat()
    1. concat()用于将一或多个字符串拼接起来,返回拼接得到的新字符串。不改变原字符串
    2. concat()方法可以接收任意多个参数,也就是说可以通过它拼接任意多个字符串
    3. 虽然concat()是专门用来拼接字符串的方法,但实践中使用更多的还是加号操作符(+)。而且,使用加号操作符在大多数情况下都比使用concat()方法要简便易行(特别是在拼接多个字符串的情况下)
    var stringValue=new String("hello ");
    var result=stringValue.concat("world");
    alert(result);//"hello world"
    alert(stringValue);//"hello "
    
    var stringValue=new String("hello ");
    var result=stringValue.concat("world","!");
    alert(result);//"hello world!"
    alert(stringValue);//"hello "
    
    2.slice()
    1. 返回被操作数的一个子字符串,而且也接收一或两个参数。第一个参数指定子字符串的开始位置,第二个参数(在指定的情况下)表示子字符串到哪里结束
    2. 第二个参数指定的是子字符串最后一个字符后面的位置
    3. 如果没有给这些方法传递第二个参数,则将字符串的末尾作为结束吧位置
    4. 不会修改字符串本身的值——只是返回一个基本类型的字符串值,对原字符串没有任何影响
    5. 传入参数是负数时,slice()会将传入的负值与字符串的长度相加
    var stringValue=new String("hello world");
    alert(stringValue.slice(3));//"lo  world" 
    alert(stringValue.slice(3,7));//"lo w" 
    
    var stringValue=new String("hello world");
    alert(stringValue.slice(-3));//"rld"
    alert(stringValue.slice(3,-4));//"lo w"
    
    3.substr()
    1. 返回被操作数的一个子字符串,而且也接收一或两个参数。第一个参数指定子字符串的开始位置,第二个参数(在指定的情况下)表示子字符串到哪里结束
    2. 第二个参数指定的是返回的字符个数
    3. 如果没有给这些方法传递第二个参数,则将字符串的末尾作为结束吧位置
    4. 不会修改字符串本身的值——只是返回一个基本类型的字符串值,对原字符串没有任何影响
    5. 传入参数是负数时,substr()方法会将负的第一个参数加上字符串的长度,而将将负的第二个参数转换为0
    var stringValue=new String("hello world");
    alert(stringValue.substr(3));//"lo  world"
    alert(stringValue.substr(3,7));//"lo worl"
    
    var stringValue=new String("hello world");
    alert(stringValue.substr(-3));//"rld"
    alert(stringValue.substr(3,-4));//""
    //substr()会将第二个参数转换为0,返回的字符串包含零个字符串,也就是一个空字符串
    
    4.substring()
    1. 返回被操作数的一个子字符串,而且也接收一或两个参数。第一个参数指定子字符串的开始位置,第二个参数(在指定的情况下)表示子字符串到哪里结束
    2. 第二个参数指定的是子字符串最后一个字符后面的位置
    3. 如果没有给这些方法传递第二个参数,则将字符串的末尾作为结束吧位置
    4. 不会修改字符串本身的值——只是返回一个基本类型的字符串值,对原字符串没有任何影响
    5. 传入参数是负数时,substring()方法会将所有的负值参数都转换为0
    var stringValue=new String("hello world");
    alert(stringValue.substring(3));//"lo  world"
    alert(stringValue.substring(3,7));//"lo w"
    
    var stringValue=new String("hello world");
    alert(stringValue.substring(-3));//"hello  world"
    alert(stringValue.substring(3,-4));//"hel"
    //substring()方法会把第二个参数转换为0,也就是substring(3,0),而由于这个方法会将较小的数作为开始位置,将较大数作为结束位置,最终相当于调用了substring(0,3)
    

    (三).字符串位置方法

    1.indexOf()
    1. 从一个字符串中搜索给定的字符串,然后返回怒字符串的位置(如果没有找到该字符串,则返回-1)
    2. indexOf()方法从字符串的开头向后搜索字符串
    3. 如果给定字符串仅出现一次,那么indexOf()lastIndexOf()会返回相同的位置值
    4. 第二个参数(可选)表示从字符串中的哪个位置开始搜索
    5. indexOf()会从该参数指定的位置向后搜索,忽略该位置之前的所有字符
    var stringValue=new String("hello world");
    alert(stringValue.indexOf("o"));//4
    
    var stringValue=new String("hello world");
    alert(stringValue.indexOf("o",6));//7
    
    var strinngValue="Lorem ipsum dolor sit amet, consectetur adipisicing elit";
    var positions=new Array();
    var pos=stringValue.indexOf("e");
    while(pos>-1){
    	positions.push(pos);
    	pos=stringValue.indexOf("e",pos+1);
    }
    alert(positions);
    
    2.lastIndexOf()
    1. 从一个字符串中搜索给定的字符串,然后返回怒字符串的位置(如果没有找到该字符串,则返回-1)
    2. lastIndexOf()方法是从字符串的末尾向前搜索字符串
    3. 第二个参数(可选)表示从字符串中的哪个位置开始搜索
    4. lastIndexOf()会从该参数指定的位置向前搜索,忽略该位置之后的所有字符
    var stringValue=new String("hello world");
    alert(stringValue.lastIndexOf("o"));//7
    
    var stringValue=new String("hello world");
    alert(stringValue.lastIndexOf("o",6));//4
    

    (四).trim()方法

    1. trim()会创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果
    2. trim()返回的是字符串的副本,所以原始字符串中的前置及后缀空格会保持不变
    3. 支持这个方法的浏览器有IE 9+Firefox 3.5+Safari 5+Opera 10.5+Chrome
    4. 此外,Firefox 3.5+Safari 5+Chrome 8+还支持非标准的trimLeft()trimRight()方法,分别用于删除字符串开头和末尾的空格
    var stringValue=new String(" hello world ");
    var trimmedStringValue=stringValue.trim();
    alert(stringValue);" hello world "
    alert(trimmedStringValue);//"hello world"
    

    (五).字符串大小写转换方法

    1.toLowerCase()
    1. 借鉴自java.lang.String中的同名方法,将对象转换为小写
    var stringValue=new String("hello world");
    alert(stringValue.toLowerCase());//"hello world"
    
    2.toLocaleLowerCase()
    1. 针对特定时区,将对象转换为小写
    2. 一般来说,在不知道自己的代码将在哪种语言环境中运行的情况下,还是使用针对地区的方法更稳妥一些
    var stringValue=new String("hello world");
    alert(stringValue.toLocaleLowerCase());//"hello world"
    
    3.toUpperCase()
    1. 借鉴自java.lang.String中的同名方法,将对象转换为大写
    var stringValue=new String("hello world");
    alert(stringValue.toUpperCase());//"HELLO WORLD"
    
    4.toLocaleUpperCase()
    1. 针对特定时区,将对象转换为大写
    2. 一般来说,在不知道自己的代码将在哪种语言环境中运行的情况下,还是使用针对地区的方法更稳妥一些
    var stringValue=new String("hello world");
    alert(stringValue.toLocaleUpperCase());//"HELLO WORLD"
    

    (六).字符串的模式匹配方法

    1.match()
    1. match(),在字符串上调用这个方法,本质上与调用RegExp()exec()方法相同
    2. match()方法只接收一个参数,要么是一个正则表达式,要么是一个RegExp对象
    var text=new String("cat,bat,sat,fat");
    var pattern=/.at/;
    //与pattern.exec(text)相同
    var matches=text.match(pattern);
    alert(matches.index);//0
    alert(matches[0]);
    alert(pattern.lastIndex);//0
    //match()方法返回了一个数组
    //如果是调用RegExp对象的exec()方法并传递本例中的字符串作为参数,那么也会得到与此相同的数组:数组的第一项是与整个模式匹配的字符串,之后的每一项(如果有)保存着与正则表达式中的捕获组匹配的字符串
    
    2.search()
    1. search()方法的唯一参数与match()方法的参数相同:由字符串或RegExp对象指定的一个正则表达式
    2. search()方法返回字符串中第一个匹配项的索引;如果没有找到匹配项,则返回-1
    3. search()方法始终是从字符串开头向后查找模式
    var text=new String("cat,bat,sat,fat");
    var pos=text.search(/at/);
    alert(pos);//1
    //search()方法返回1,即"at"在字符串中第一次出现的位置
    
    3.replace()
    1. replace()用于替换字符串
    2. 这个方法接收两个参数:第一个参数可以是一个RegExp对象或者一个字符串(这个字符串不会被转换成正则表达式),第二个参数可以是一个字符串或者一个函数
    3. 如果第一个参数是字符串,那么只会替换第一个字符串。要想替换所有子字符串,唯一的办法就是提供一个正则表达式,而且要指定全局(g)标志
    4. 如果第二个参数是字符串,那么还可以使用一些特殊的字符序列,将正则表达式操作得到的值插入到结果字符串中
    5. replace()方法的第二个参数也可以是一个函数。在只有一个匹配项(即与模式匹配的字符串)的情况下,会向这个函数传递3个阐述:模式匹配、模式匹配项在字符串中的位置和原始字符串。在正则表达式中定义了多个捕获组的情况下,传递给函数的参数依次是模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项······,但最后两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串。这个函数应该返回一个字符串,表示应该被替换的匹配项。使用函数作为replace()方法的第二个参数可以实现更加精细的替换操作
    function htmlEscape(text){
    	return text.replace(/[<>"&]/g,function(match,pos,originalText){
    		switch(match){
    			case "<":return "&lt;";
    			case ">":return "&map;";
    			case "\"":return "&quot;";
    		}
    	};)
    }
    alert(htmlEscape("<p class=\"greeting\">Hello world!</p>"));
    //&lt;p class=&quot;greeting&quot;&gt;Hello world!&lt;/p&gt;
    
    字符序列 替换文本
    $$ $
    $& 匹配整个模式的子字符串。与RegExp.lastMatch的值相同
    $' 匹配的子字符串之前的字符串。与RegExp.leftContext的值相同
    $` 匹配的子字符串之后的子字符串。与RegExp.rightContext的值相同
    $n 匹配第n个捕获组的子字符串,其中n等于0~9.例如,$1是匹配第一个捕获组的子字符串,$2是匹配第二个捕获组的子字符串,以此类推。如果正则表达式中没有定义捕获组,则使用空字符串
    $nn 匹配第nn个捕获组的子字符串,其中nn等于01~99。例如,$01是匹配第一个捕获组的子字符串,$02是匹配第二个捕获组的子字符串,以此类推。如果正则表达式中没有定义捕获组,则使用空字符串
    var text=new String("cat,bat,sat,fat");
    var result=text.replace("at","ond");
    alert(result);//"cond,bat,sat,fat"
    //传入replace()方法的是字符串"at"和替换用的字符串"ond"。替换的结果是把"cat"变成了"cond",但字符串中的其他字符并没有收到任何影响
    
    result=text.replace(/at/g,"ond");
    alert(result);//"cond,bond,sond,fond"
    //通过将第一个参数修改为带有全局标志的正则表达式,就将全部"at"都替换成了"ond"
    
    var text=new String("cat,bat,sat,fat");
    result=text.replace(/(.at)/g,"word($1)");
    alert(result);//word(cat),word(bat),word(sat),word(fat)
    //在此,每个以"at"结尾的单词都被替换了,替换结果是"word"后跟一对圆括号,而圆括号中是被字符序列$1所替换的单词
    
    4.split()
    1. split()方法可以基于指定的分隔符将一个字符串分隔成多个字符串,并将结果放在一个数组中。分隔符可以是字符串,也可以是一个RegExp对象(这个方法不会将字符串看成正则表达式)
    2. split()方法可以接受可选的第二个参数,用于指定数组的大小,以便确保返回的数组不会超过既定大小
    3. split()正正则表达式的支持因浏览器而异。尽管对于简单的模式没什么差别,但对于未发现匹配项及带有捕获组的模式,匹配的行为大不相同
      • IE8及之前版本会忽略捕获组。ECMA-262规定应该把捕获组拼接到结果数组中。IE9能正确地在结果中包含捕获组
      • Firefox 3.6及之前版本在捕获组未找到匹配项时,会在结果数组中包含空字符串;ECMA-262规定没有匹配项的捕获组在结果数组中应该用undefined表示
    var colorText=new String("red,blue,green,yellow");
    var colors1=colorText.split(",");//["red","blue","green","yellow"]
    var colors1=colorText.split(",",2);//["red","blue"]
    var colors1=colorText.split(/[^\,]+/);//["",",",",",""]
    //通过正则表达式指定的分隔符出现在了字符串的的开头(即子字符串"red")和末尾(即子字符串"yellow")
    

    (七).localeCompare()方法

    1. localeCompare()方法比较两个字符串,并返回下列值中的第一个
      • 如果字符串在字母表中应该在字符串参数之前,则返回一个负数(大多数情况下是-1,具体的值要视实现而定)
      • 如果字符串等于字符串参数,则返回0
      • 如果字符串在字母表中应该排在字符串参数之后,则返回一个正数(大多数情况下是-1,具体的值同样要视实现而定)
    var stringValue=new String("yellow");
    alert(stringValue.localeCompare("brick"));//1
    alert(stringValue.localeCompare("yellow"));//0
    alert(stringValue.localeCompare("zoo"));//-1
    
    function determineOrder(value){
    	var result=stringValue.localeCompare(value);
    	if(result<0){
    		alert("The string 'yellow' comes before the string '"+value+"'.");
    	}else if(result>0){
    		alert("The string 'yellow' comes after the string '"+value+"'.");
    	}else{
    		alert("The string 'yellow' is equal to the string '"+value+"'.");
    	}
    }
    determineOrder("brick");
    determineOrder("yellow");
    determineOrder("zoo");
    

    (八).fromCharCode()方法

    1. String构造函数本身还有一个静态方法:fromCharCode()。这个方法的任务是接受一或多个字符编码,然后将它们转换成一个字符串
    2. 从本质上看,这个方法与实例方法charCodeAt()执行的是相反的操作
    alert(String.fromCharCode(104,101,,108,108,111));//"hello"
    //给fromCharCode()传递的是字符串"hello"中每个字母的字符编码
    

    (九).HTML方法

    1. 早期的Web浏览器提供商觉察到了使用JavaScript动态格式化HTML的需求。这些提供商就扩展了标准,实现了一些专门用于简化常见HTML格式化任务的方法
    2. 应该尽量不使用这些方法,因为它们创建的标记通常无法表达语义
    方法 输出结果
    anchor(name) <a name="name">string</a>
    big() <big>string</big>
    bold() <b>string</b>
    fixed() <tt>string</tt>
    fontcolor() <font color="color">string</font>
    fontsize() <font size="size">string</font>
    italics() <i>string</i>
    link(url) <a href="url">string</a>
    small() <small>string</small>
    strike() <strike>string</strike>
    sub() <sub>string</sub>
    sup() <sup>string</sup>

    源自
    源于整理《JavaScript高级程序设计》

    展开全文
  • string 在c++中的使用

    2018-08-11 20:44:31
    字符类型和字符数组( 字符值知识点)要提前了解一下,能更好的了解string   string类型支持长度可变的字符串 在头文件 #include&lt;string&gt;中   一:string对象的定义和初始化   string s1; ...

    字符类型和字符数组( 字符值知识点)要提前了解一下,能更好的了解string

     

    string类型支持长度可变的字符串  在头文件 #include<string>中

     

    :string对象的定义和初始化

        

    string s1;

    默认构造函数,s1位空串

    string s2(s1); 将s2初始化为s1的一个副本
    string s3("value"); 将s3初始化为一个字符串字面值副本
    string s4(n,'c') 将s4初始化为字符'c'的n个副本

    当没有明确指定对象初始华式时,系统使用默认构造函数

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
        string s1;
        s1="chenchen";
        cout<<s1<<endl;
    
        string s2(s1);
        cout<<s2<<endl;
    
        string s3("value");
        cout<<s3<<endl;
    
        string s4(10,'c');
        cout<<s4<<endl;
    
        return 0;
    }
    

     

    :string对象的读写

        对:cin>>s;//和scanf()类似

        从标准输入读取string,并将读入的串存储在s中。

     a.读取并忽略开头所有的空白字符(如空格,换行符,制表符,进纸符)

    b.读取字符直至再次遇到空白符,读取终止

    #include<iostream>
    #include<string>
    #include<cstdio>
    
    using namespace std;
    int main()
    {
        int T;
        cin>>T;
        //如果没有这个getchar()那么s首先会把我们按空格给s,这里我们要注意下
        //cin是不会这样的
        //同样的是gets()也会和getline()出现一样的情况
        /*
        比如输入:
        1 adfs
        输出:adfs有个空格
    
        输入
        1
        adfs
        输出:那么string参数被置为空string
        */
        getchar();
        while(T--)
        {
            string s;
            getline(cin,s);
            cout<<s<<endl;
        }
        return 0;
    }
    

     

    getline()了解一下,在字符串知识里有,上面有链接//换行符是丢弃的

     

     

     

    :string对象的操作

        

    s.empty() 如果s为空串,则返回true,否则返回false
    s.size() 返回s 中字符的字符个数
    s[n]

    返回s中位置为n的字符,位置从0开始计数

    s1+s2 把s1和s2链接成一个新的字符串,返回新生成的字符串
    s1=s2 把s1内容替换为s2的副本
    v1==v2 判断v1与v2的内容,相等则返回true,否则返回false
    !=, <, <=, >, >= 保持这些操作的惯有含义

    a. string::size_type 类型

     注意s.size()返回的类型是string::size_type()类型,而不是int形,string::size_type 的类型长度是int的俩倍所以尽量让s.size()的返 回值给string::size_type 类型

    因为string 的字符会很长,所以有了string::size_type 类型

    #include<iostream>
    #include<string>
    #include<cstdio>
    
    using namespace std;
    int main()
    {
        string s("value");
        string::size_type it;
        it=s.size();
        cout<<it<<endl;//5
        return 0;
    }
    

    b.和字符串字面值的连接问题

    #include<iostream>
    #include<string>
    #include<cstdio>
    
    using namespace std;
    int main()
    {
        string s1="hello";
        string s2=("world");
        string s3=s1+", ";//正确的
        cout<<s3<<endl;
    //    string s4="hello"+", ";//错误的
        string s5=s1+", "+", "+"world";//错误的
    //    string s6="hello"+", "+s2;//错误的
        cout<<s5<<endl;
        return 0;
    }
    

    s5的理解为:string t=s1+", "; s5=t+"world";

    注意俩个字符串字面值相加,是非法的

     

     

    c.下标操作可以作左值

    如:s[x]='*';

     

     

    :string对象中字符的处理

    这些函数都在cctype头文件中定义

     

    isalnum(c) 如果c是字母或数字,则为true
    isalpha(c) 如果c是字母,则为true
    isdigit(c) 如果c是数字,则为true
    islower(c) 如果c是小写字母,则为ture
    isupper(c) 如果c是大写字母,则为true
    isspace(c) 如果c是空白字符,则为true
    ispunct(c) 如果c是标点符号,则为true
    iscntrl(c) 如果c是控制字符,则为true
    isgraph(c) 如果c不是空格,但是可打印,则为true
    isprint(c) 如果c是可打印的字符,则为true
    isxdigit(c) 如果c是十六进制数,则为true
    tolower(c) 如果c是大写字母,则返回其小写字母形式,否则直接返回c
    toupper(c) 如果c是小写字母,则返回其大写字母形式,否则直接返回c

    表中大部分函数是测试一个给定的字符是否符合条件,并返回一个int值作为真值。如果失败,则函数返回0,否则返回一个(无意义的)非0值,表示被测字符符合条件

     

    注意:除了一些特殊操作,string类型提供与vector容器相同的操作。string类型和vector容器不同的是,它不支持以栈方式操纵容器:在string类型中不能使用front,back,pop_back操作

    string 是支持push_back()的,因为string也是顺序容器

     

     

    :string 的遍历

    #include<iostream>
    #include<string>
    #include<cstdio>
    
    using namespace std;
    int main()
    {
        string s("Hiya");
        string::iterator it;
        for(it=s.begin();it!=s.end();++it)
            cout<<*it<<endl;
        for(int i=0;s[i];i++)
            cout<<s[i]<<endl;
        cout<<s<<endl;
        return 0;
    }
    

    :构造string对象的其他方法

    写这个之前学个知识点:

    char s[]="abcd";  这个是字符串,以'\0'结束的,用strlen(s)是4,'\0'不计,但是它是有五个字符的
    char s1[]={'a','b','c','d'};  这个是字符数组,没有'\0',用strlen(s1)是不确定的,它有四个字符

     a.使用只有一个指针参数的构造函数,该指针指向空字符结束的字符数组中的第一个元素。//前面已经介绍了

    b.构造函数需要一个指向字符数组元素的指针和一个标记要复制多少字符的计数器做参数,由于该构造函数有一个计数器,因此  数组不必以空字符结束

     

     

    string s(cp,n) 创建一个string对象,它被初始化为cp所指向数组的前n个元素副本
    string s(s2,pos2)

    创建一个string对象,它被初始化为一个已存在的string对象s2中从下标pos2开始的字符的副本

    如果pos2>s.size(),则该操作未定义

    string s(s2,pos2,len2)

    创建一个string对象,它被初始化为s2中从下标pos2开始的len2个字符的副本

    如果pos2>s2.size(),则该操作未定义

    无论len2的值是多少,最多只能复制s2.size()-pos2个字符

    注意:n,len2和pos2都是unsinged

    #include<iostream>
    #include<string>
    #include<cstdio>
    
    using namespace std;
    int main()
    {
        char *cp="Hiya";
        char c_array[]="world!!!!";
        char no_null[] = {'H','i'};
        string s1(cp);
        cout<<"s1="<<s1<<endl;
        string s2(c_array,5);
        cout<<"s2="<<s2<<endl;
        string s3(c_array+5,4);
        cout<<"s3="<<s3<<endl;
        //string s4(no_null);//s4是错误的
        //cout<<s4<<endl;
        string s5(no_null,2);
        cout<<"s5="<<s5<<endl;
        string s6(s1,2);
        cout<<"s6="<<s6<<endl;
        string s7(s1,0,2);
        cout<<"s7="<<s7<<endl;
        string s8(s1,0,8);
        cout<<"s8="<<s8<<endl;
        return 0;
    }

     

    :修改string对象的其他方法

     

    与容器共有的string操作
    s.insert(p,t) 在迭代器p指向的元素之前插入一个值为t的新元素。返回指向新插入元素的迭代器
    s.insert(p,n,t) 在迭代器p指向的元素之前插入n个值为t的新元素。返回void
    s.insert(p,b,e) 在迭代器p指向的元素之前插入b和e标记范围内所有的元素,返回void
    s.assign(b,e) 用迭代器b和e标记范围内的元素替换s。对于string类型,该操作返回s,对于容器类型,则返回void
    s.assign(n,t) 用值为t的n个副本替换s。对于string类型,该操作返回s,对于容器类型,返回void
    s.erase(p) 删除迭代器p指向的元素,返回一个迭代器,指向被删除元素后面的元素
    s.erase(b,e) 删除迭代器b和e标记范围内所有的元素,返回一个迭代器,指向被删除元素段后面的第一个元素
    reverse(b,e) 把迭代器b和e标记范围内的所有元素反转

     

    #include<iostream>
    #include<string>
    #include<cstdio>
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        string s="12345abcde";
        string::iterator it;
        it=s.begin();
        s.insert(it+2,'s');
        cout<<"s="<<s<<endl;
        it=s.begin();
        s.insert(it+2,2,'t');
        cout<<s<<endl;
        it= s.begin();
        s.assign(it,it+3);
        cout<<s<<endl;
        s.assign(10,'c');
        cout<<s<<endl;
        string s1="sfdfsaf";
        s1.erase(s1.begin());
        cout<<s1<<endl;
        s1.erase(s1.begin(),s1.begin()+3);
        cout<<s1<<endl;
        reverse(s1.begin(),s1.end());
        cout<<s1<<endl;
        return 0;
    }

     

     

     

    string 类型特有的版本
    s.insert(pos,n,c) 在下表pos的元素之前插入n个字符c
    s.insert(pos,s2)

    在下标为pos的元素之前插入string对象s2的副本

    s.insert(pos,s2,pos2,len)

    在下标为pos的元素之前插入s2中从下标pos2开始len个字符

    s.insert(pos,cp,len) 在下标为pos的元素之前插入s2中从下标pos2开始的len个字符
    s.insert(pos,cp) 在下标为pos的元素之前插入cp所指向的以空字符结束的字符串副本
    s.assign(s2) 用s2的副本替换s
    s.assign(s2,pos2,len) 用s2中从下标pos2开始的len个字符副本替换s
    s.assign(cp,len) 用cp所指向数组的前len个字符副本替换s
    s.assign(cp) 用cp所指向的以空字符结束的字符串副本替换s

    s.erase(pos,len)

    删除从下标pos开始的len个字符

     

    #include<iostream>
    #include<string>
    #include<cstdio>
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        string s="12345abcde";
        s.insert(2,2,'s');
        cout<<s<<endl;
        string s2="zyz";
        s.insert(1,s2);
        cout<<s<<endl;
        s.insert(0,s2,0,2);
        cout<<s<<endl;
        char *cp="Statelu pou";
        s.insert(0,cp);
        cout<<s<<endl;
        s.insert(0,cp,2);
        cout<<s<<endl;
        string s3="123456abc";
        s.assign(s3);
        cout<<s<<endl;
        string s4="987";
        s.assign(s4,0,3);
        cout<<s<<endl;
        s.erase(1,6);
        cout<<s<<endl;
    
        return 0;
    }

    除非特殊声明,上述所有操作都返回s的引用

     

    其实string 的特有版本,就是多了pos下标的使用还有就是控制了一下,比较方便了

     

    :只适用于string类型的操作

    a.substr函数,返回当前string对象的子串

    b.append和replace函数,用于修改string对象

    c.一系列find函数,用于查找string对象

     

    子串操作
    s.substr(pos,n) 返回一个string类型的字符串,它包含s中从下标pos开始的n个字符
    s.substr(pos) 返回一个string类型的字符串,它包含从下标pos开始到s末为的所有字符
    s.substr() 返回s的副本

     

    #include<iostream>
    #include<string>
    #include<cstdio>
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        string s("hello world");
        string s2=s.substr(6,5);
        cout<<s2<<endl;
        string s3=s.substr(6);
        cout<<s3<<endl;
    
        return 0;
    }

     

     

    修改string对象的操作
    s.append(args) 将args串接在s后面。返回s的引用
    s.replace(pos,len,args)

    删除s中从下标pos开始的len个字符,用args指定的字符替换之,返回s的引用

    这个版本中,args不能为b2,e2

    s.replace(b,e,args)

    删除迭代器b和e标记的范围内所有的字符,用args代替之。返回s的引用

    这个版本中,args不能为 s1,pos2,len2

     

     

    append和replace操作的参数
    s2 string类型的字符串s2
    s2,pos1,pos2 字符串s2中从下标pos2开始的len2个字符
    cp 指针cp指向的以空字符结束的数组
    cp,len2

    cp指向的以空字符结束的数组中前len2个字符

    n,c 字符c的n个副本
    b2,e2 迭代器b2和e2标记的范围内所有字符

     

     

    #include<iostream>
    #include<string>
    #include<cstdio>
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        string s("C++ Prime");
        s.append(" 3rd Ed");
        cout<<s<<endl;
        s.insert(s.size(),"w");
        cout<<s<<endl;
        s.replace(10,3,"4th");
        cout<<s<<endl;
        s.erase(10,3);
        cout<<s<<endl;
        s.insert(10,"4th");
        cout<<s<<endl;
        return 0;
    }
    

     

     

     

    string类型的查找操作

    string类提供了6中查找函数,每种函数以不同形式的find命名。这些操作全都返回string::size_type类型的值,以下标形式标记查找所发生的位置;或者返回一个名为string::npos 的特殊值,说明没有找到匹配。string类将npos定义为保证大于任何有效下标的值

     

    string类型的查找操作
    s.find(args) 在s中查找args的第一次出现
    s.rfind(args) 在s中查找args的最后一次出现
    s.find_first_of(args) 在s中查args的任意字符的第一次出现
    s.find_last_of(args) 在s中查找args的任意字符的最后一次出现
    s.find_first_not_of(args) 在s中查找第一个不属于args的字符
    s.find_last_not_of(args) 在s中查找最后一个不属于args的字符
    string类型提供的find操作的参数
    c,pos 在s中,从下标pos标记的位置开始,查找字符c、pos的默认值是0
    s2,pos 在s中,从下标pos标记的位置开始,查找string对象s2,pos的默认值为0
    cp,pos 在s中从下标pos标记的位置开始,查找cp所指向的c风格的以空格结束的字符串。pos默认值为0
    cp,pos,n 在s中,从下标pos标记的位置开始,查找指针cp所指向数组的前n个字符,pos和n都没有默认值

     

    #include<iostream>
    #include<string>
    #include<cstdio>
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        //查找单个单词
        string ss="abcdefg";
        string::size_type pos=ss.find('c',0);
        cout<<pos<<endl;
        cout<<ss[pos]<<endl;
    
    
    
    
        //如果找不到就是npos
        //精确匹配的查找
        string name("AnnaBelle");
        string::size_type pos1=name.find("Anna");
        cout<<pos1<<endl;//子串Anna在name中的下标是0
    
        string s("annaBelle");
        pos1=s.find("Anna");//pos1=npos
        //cout<<pos1<<endl;
    
    
    
    
        //查找任意字符
        string s2("0123456789");
        string s3("r2d2");
    //    string::size_type pos=s3.find_first_of(s2);
    //    cout<<s3[pos]<<endl;//2
    //    cout<<pos<<endl;//1
    
    
    
    
    
    
        //指定查找的起点
        string::size_type pos2=0;
        while((pos2=s3.find_first_of(s2,pos2))!=string::npos)
        {
            cout<<"pos2="<<pos2<<endl;
            cout<<s3[pos2]<<endl;
            pos2++;//pos2值必须加1,以确保下一次循环从刚找到的数字后面开始查找下一个数字
        }
    
    
        //寻找不匹配点
        string nums("0123456789");
        string depet("03714p3");
        string::size_type pos3=depet.find_first_not_of(nums);
        cout<<"pos3="<<pos3<<endl;
        cout<<depet[pos3]<<endl;
    
        //反向查找
        string river("Mississippi");
        string::size_type first=river.find("is");
        string::size_type last=river.rfind("is");
        cout<<first<<"    "<<river[first]<<endl;
        cout<<last<<"    "<<river[last]<<endl;
    
        return 0;
    }

     

    九:string对象的比较

     

    string类型的compare操作
    s.compare(s2) 比较s和s2
    s.compare(pos1,n1,s2)

    让s中从pos下标位置开始的n1个字符与s2做比较

    s.compare(pos1,n1,s2,pos2,n2) 让s中从pos1下标位置开始的n1个字符与s2中从pos2下标位置开始的n2个字符做比较
    s.compare(cp) 比较s和cp所指向的以空字符结束的字符串
    s.compare(pos1,n1,cp) 让s从pos1下标位置开始的n1个字符与cp所指向的字符串做比较
    s.compare(pos1,n1,cp,n2)

    让s中从pos1下标位置开始的n1个字符与cp所指向字符串的前n2个字符做比较

    比如:s1.compare(args);

    a.正数,此时s1大于args所代表的string对象

    b.负数,此时s1小于args所代表的string对象

    c.0,此时s1恰好等于args所代表的string对象

     

    这次举个例子以前做的题

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,q;
        scanf ("%d%d", &n,&q);
        string s;
        cin>>s;
        for ( int i=0; i<q;i++ )
        {
            int a,b,c,d;
            scanf ( "%d%d%d%d" ,&a,&b ,&c , &d );
            if ( s.compare( a-1,b-a+1,s,c-1,d-c+1)==0 )
                printf ( "YES\n" );
            else
                printf ( "NO\n" );
        }
     
        return 0;
    }
    
    

     

    展开全文
  • 深入理解Java String

    2019-09-11 10:43:47
    在Java语言了中,所有类似“ABC”的字面值,都是String类的实例;String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作;Java语言为“+”连接符(字符串连接符)以及...

    在Java语言中,所有类似“ABC”的字面值,都是String类的实例;String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作;Java语言为“+”连接符(字符串连接符)以及对象转换为字符串提供了特殊的支持,字符串对象可以使用“+”连接其他对象。String类的部分源码如下

    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {
        /** The value is used for character storage. */
        private final char value[];
    
        /** Cache the hash code for the string */
        private int hash; // Default to 0
        ...
    }
    

    从上面可以看出
    1)String类被final关键字修饰,意味着String类不能被继承,并且它的成员方法都默认为final方法;字符串一旦创建就不能再修改。
    2)String类实现了Serializable、CharSequence、 Comparable接口。
    3)String实例的值是通过字符数组实现字符串存储的。


    1. “+”连接符

    1.1 “+”连接符的实现原理

    Java语言为“+”连接符以及对象转换为字符串提供了特殊的支持,字符串对象可以使用“+”连接其他对象。其中字符串连接是通过 StringBuilder(或 StringBuffer)类及其append 方法实现的,对象转换为字符串是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。有关字符连接和转换的更多信息,可以参阅 Gosling、Joy 和 Steele 合著的 《The Java Language Specification》

    我们可以通过反编译验证一下

    /**
     * 测试代码
     */
    public class Test {
        public static void main(String[] args) {
            int i = 10;
            String s = "abc";
            System.out.println(s + i);
        }
    }
    
    /**
     * 反编译后
     */
    public class Test {
        public static void main(String args[]) {    //删除了默认构造函数和字节码
            byte byte0 = 10;      
            String s = "abc";      
            System.out.println((new StringBuilder()).append(s).append(byte0).toString());
        }
    }
    

    由上可以看出,Java中使用"+"连接字符串对象时,会创建一个StringBuilder()对象,并调用append()方法将数据拼接,最后调用toString()方法返回拼接好的字符串。由于append()方法的各种重载形式会调用String.valueOf方法,所以我们可以认为:

    //以下两者是等价的
    s = i + ""
    s = String.valueOf(i);
     
    //以下两者也是等价的
    s = "abc" + i;
    s = new StringBuilder("abc").append(i).toString();
    

    1.2 “+”连接符的效率

    使用“+”连接符时,JVM会隐式创建StringBuilder对象,这种方式在大部分情况下并不会造成效率的损失,不过在进行大量循环拼接字符串时则需要注意。

    String s = "abc";
    for (int i=0; i<10000; i++) {
        s += "abc";
    }
    
    /**
     * 反编译后
     */
    String s = "abc";
    for(int i = 0; i < 1000; i++) {
         s = (new StringBuilder()).append(s).append("abc").toString();    
    }
    

    这样由于大量StringBuilder创建在堆内存中,肯定会造成效率的损失,所以在这种情况下建议在循环体外创建一个StringBuilder对象调用append()方法手动拼接(如上面例子如果使用手动拼接运行时间将缩小到1/200左右)。

    /**
     * 循环中使用StringBuilder代替“+”连接符
     */
    StringBuilder sb = new StringBuilder("abc");
    for (int i = 0; i < 1000; i++) {
        sb.append("abc");
    }
    sb.toString();
    

    与此之外还有一种特殊情况,也就是当"+"两端均为编译期确定的字符串常量时,编译器会进行相应的优化,直接将两个字符串常量拼接好,例如:

    System.out.println("Hello" + "World");
    
    /**
     * 反编译后
     */
    System.out.println("HelloWorld");
    
    /**
     * 编译期确定
     * 对于final修饰的变量,它在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到它的字节码流中。
     * 所以此时的"a" + s1和"a" + "b"效果是一样的。故结果为true。
     */
    String s0 = "ab"; 
    final String s1 = "b"; 
    String s2 = "a" + s1;  
    System.out.println((s0 == s2)); //result = true
    
    /**
     * 编译期无法确定
     * 这里面虽然将s1用final修饰了,但是由于其赋值是通过方法调用返回的,那么它的值只能在运行期间确定
     * 因此s0和s2指向的不是同一个对象,故上面程序的结果为false。
     */
    String s0 = "ab"; 
    final String s1 = getS1(); 
    String s2 = "a" + s1; 
    System.out.println((s0 == s2)); //result = false 
     
    public String getS1() {  
        return "b";   
    }
    

    综上,“+”连接符对于直接相加的字符串常量效率很高,因为在编译期间便确定了它的值,也就是说形如"I"+“love”+“java”; 的字符串相加,在编译期间便被优化成了"Ilovejava"。对于间接相加(即包含字符串引用,且编译期无法确定值的),形如s1+s2+s3; 效率要比直接相加低,因为在编译器不会对引用变量进行优化。

    2. 字符串常量池

    在Java的内存分配中,总共3种常量池,分别是Class常量池运行时常量池字符串常量池

    字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串使用的非常多。JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。每当创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。由于String字符串的不可变性,常量池中一定不存在两个相同的字符串

    /**
     * 字符串常量池中的字符串只存在一份!
     * 运行结果为true
     */
    String s1 = "hello world!";
    String s2 = "hello world!";
    System.out.println(s1 == s2);
    

    2.1 内存区域

    在HotSpot VM中字符串常量池是通过一个StringTable类实现的,它是一个Hash表,默认值大小长度是1009;这个StringTable在每个HotSpot VM的实例中只有一份,被所有的类共享;字符串常量由一个一个字符组成,放在了StringTable上。要注意的是,如果放进String Pool的String非常多,就会造成Hash冲突严重,从而导致链表会很长,而链表长了后直接会造成的影响就是当调用String.intern时性能会大幅下降(因为要一个一个找)。

    在JDK6及之前版本,字符串常量池是放在Perm Gen区(也就是方法区)中的,StringTable的长度是固定的1009;在JDK7版本中,字符串常量池被移到了堆中,StringTable的长度可以通过**-XX:StringTableSize=66666**参数指定。至于JDK7为什么把常量池移动到堆上实现,原因可能是由于方法区的内存空间太小且不方便扩展,而堆的内存空间比较大且扩展方便。

    2.2 存放的内容

    在JDK6及之前版本中,String Pool里放的都是字符串常量;在JDK7.0中,由于String.intern()发生了改变,因此String Pool中也可以存放放于堆内的字符串对象的引用。

    /**
     * 运行结果为true false
     */
    String s1 = "AB";
    String s2 = "AB";
    String s3 = new String("AB");
    System.out.println(s1 == s2);
    System.out.println(s1 == s3);
    

    由于常量池中不存在两个相同的对象,所以s1和s2都是指向JVM字符串常量池中的"AB"对象。new关键字一定会产生一个对象,并且这个对象存储在堆中。所以String s3 = new String(“AB”);产生了两个对象:保存在栈中的s3和保存堆中的String对象。
    这里写图片描述

    当执行String s1 = "AB"时,JVM首先会去字符串常量池中检查是否存在"AB"对象,如果不存在,则在字符串常量池中创建"AB"对象,并将"AB"对象的地址返回给s1;如果存在,则不创建任何对象,直接将字符串常量池中"AB"对象的地址返回给s1。

    3. intern方法

    直接使用双引号声明出来的String对象会直接存储在字符串常量池中,如果不是用双引号声明的String对象,可以使用String提供的intern方法。intern 方法是一个native方法,intern方法会从字符串常量池中查询当前字符串是否存在,如果存在,就直接返回当前字符串;如果不存在就会将当前字符串放入常量池中,之后再返回。

    JDK1.7的改动:

    1. 将String常量池 从 Perm 区移动到了 Java Heap区
    2. String.intern() 方法时,如果存在堆中的对象,会直接保存对象的引用,而不会重新创建对象。
    /**
     * Returns a canonical representation for the string object.
     * <p>
     * A pool of strings, initially empty, is maintained privately by the
     * class {@code String}.
     * <p>
     * When the intern method is invoked, if the pool already contains a
     * string equal to this {@code String} object as determined by
     * the {@link #equals(Object)} method, then the string from the pool is
     * returned. Otherwise, this {@code String} object is added to the
     * pool and a reference to this {@code String} object is returned.
     * <p>
     * It follows that for any two strings {@code s} and {@code t},
     * {@code s.intern() == t.intern()} is {@code true}
     * if and only if {@code s.equals(t)} is {@code true}.
     * <p>
     * All literal strings and string-valued constant expressions are
     * interned. String literals are defined in section 3.10.5 of the
     * <cite>The Java&trade; Language Specification</cite>.
     *
     * @return  a string that has the same contents as this string, but is
     *          guaranteed to be from a pool of unique strings.
     */
    public native String intern();
    

    3.1 intern的用法

    static final int MAX = 1000 * 10000;
    static final String[] arr = new String[MAX];
    
    public static void main(String[] args) throws Exception {
        Integer[] DB_DATA = new Integer[10];
        Random random = new Random(10 * 10000);
        for (int i = 0; i < DB_DATA.length; i++) {
            DB_DATA[i] = random.nextInt();
        }
        long t = System.currentTimeMillis();
        for (int i = 0; i < MAX; i++) {
            //arr[i] = new String(String.valueOf(DB_DATA[i % DB_DATA.length]));
             arr[i] = new String(String.valueOf(DB_DATA[i % DB_DATA.length])).intern();
        }
    
        System.out.println((System.currentTimeMillis() - t) + "ms");
        System.gc();
    }
    

    运行的参数是:-Xmx2g -Xms2g -Xmn1500M 上述代码是一个演示代码,其中有两条语句不一样,一条是未使用 intern,一条是使用 intern。结果如下图

    未使用intern,耗时826ms:
    这里写图片描述
    使用intern,耗时2160ms:
    这里写图片描述
    通过上述结果,我们发现不使用 intern 的代码生成了1000w 个字符串,占用了大约640m 空间。 使用了 intern 的代码生成了1345个字符串,占用总空间 133k 左右。其实通过观察程序中只是用到了10个字符串,所以准确计算后应该是正好相差100w 倍。虽然例子有些极端,但确实能准确反应出 intern 使用后产生的巨大空间节省。

    细心的同学会发现使用了 intern 方法后时间上有了一些增长。这是因为程序中每次都是用了 new String 后,然后又进行 intern 操作的耗时时间,这一点如果在内存空间充足的情况下确实是无法避免的,但我们平时使用时,内存空间肯定不是无限大的,不使用 intern 占用空间导致 jvm 垃圾回收的时间是要远远大于这点时间的。 毕竟这里使用了1000w次intern 才多出来1秒钟多的时间。

    4. String、StringBuilder和StringBuffer

    4.1 继承结构

    这里写图片描述

    4.2 主要区别

    1)String是不可变字符序列,StringBuilder和StringBuffer是可变字符序列。
    2)执行速度StringBuilder > StringBuffer > String。
    3)StringBuilder是非线程安全的,StringBuffer是线程安全的。

    5. 总结

    String类是我们使用频率最高的类之一,也是面试官经常考察的题目,下面是一个小测验。

    public static void main(String[] args) {
        String s1 = "AB";
        String s2 = new String("AB");
        String s3 = "A";
        String s4 = "B";
        String s5 = "A" + "B";
        String s6 = s3 + s4;
        System.out.println(s1 == s2);
        System.out.println(s1 == s5);
        System.out.println(s1 == s6);
        System.out.println(s1 == s6.intern());
        System.out.println(s2 == s2.intern());
    }
    

    运行结果:
    这里写图片描述

    解析:真正理解此题目需要清楚以下三点
    1)直接使用双引号声明出来的String对象会直接存储在常量池中;
    2)String对象的intern方法会得到字符串对象在常量池中对应的引用,如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用;
    3) 字符串的+操作其本质是创建了StringBuilder对象进行append操作,然后将拼接后的StringBuilder对象用toString方法处理成String对象,这一点可以用javap -c命令获得class文件对应的JVM字节码指令就可以看出来。
    这里写图片描述

    参考文献
    https://docs.oracle.com/javase/8/docs/api/
    https://blog.csdn.net/sinat_19425927/article/details/38663461
    https://www.cnblogs.com/xiaoxi/p/6036701.html
    https://tech.meituan.com/in_depth_understanding_string_intern.html

    展开全文
  • String详细用法小结

    2015-10-19 21:14:39
    所有已实现的接口: Serializable, ...public final class Stringextends Objectimplements Serializable, ComparableString>, CharSequence String 类代表字符串。Java 程序中的所有字符串字面值(如
    所有已实现的接口:
    Serializable, CharSequence, Comparable<String>

    public final class String
    extends Objectimplements Serializable, Comparable<String>, CharSequence
    
    

    String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

    字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:

         String str = "abc";
     

    等效于:

         char data[] = {'a', 'b', 'c'};
         String str = new String(data);
     

    下面给出了一些如何使用字符串的更多示例:

         System.out.println("abc");
         String cde = "cde";
         System.out.println("abc" + cde);
         String c = "abc".substring(2,3);
         String d = cde.substring(1, 2);
     

    String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。大小写映射基于 Character 类指定的 Unicode 标准版。

    Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。有关字符串串联和转换的更多信息,请参阅 Gosling、Joy 和 Steele 合著的 The Java Language Specification

    除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出 NullPointerException

    String 表示一个 UTF-16 格式的字符串,其中的增补字符代理项对 表示(有关详细信息,请参阅 Character 类中的 Unicode 字符表示形式)。索引值是指 char 代码单元,因此增补字符在 String 中占用两个位置。

    String 类提供处理 Unicode 代码点(即字符)和 Unicode 代码单元(即 char 值)的方法。

    从以下版本开始:
    JDK1.0
    另请参见:
    Object.toString(), StringBuffer, StringBuilder, Charset, 序列化表格

    字段摘要
    static Comparator<String> CASE_INSENSITIVE_ORDER
              一个对 String 对象进行排序的 Comparator,作用与 compareToIgnoreCase 相同。

     

    构造方法摘要
    String()
              初始化一个新创建的 String 对象,使其表示一个空字符序列。
    String(byte[] bytes)
              通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String
    String(byte[] bytes, Charset charset)
              通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String
    String(byte[] ascii, int hibyte)
              已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset、字符集名称,或使用平台默认字符集的 String 构造方法。
    String(byte[] bytes, int offset, int length)
              通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String
    String(byte[] bytes, int offset, int length, Charset charset)
              通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String
    String(byte[] ascii, int hibyte, int offset, int count)
              已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset、字符集名称,或使用平台默认字符集的 String 构造方法。
    String(byte[] bytes, int offset, int length, String charsetName)
              通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String
    String(byte[] bytes, String charsetName)
              通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String
    String(char[] value)
              分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
    String(char[] value, int offset, int count)
              分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
    String(int[] codePoints, int offset, int count)
              分配一个新的 String,它包含 Unicode 代码点数组参数一个子数组的字符。
    String(String original)
              初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
    String(StringBuffer buffer)
              分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。
    String(StringBuilder builder)
              分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。

     

    方法摘要
     char charAt(int index)
              返回指定索引处的 char 值。
     int codePointAt(int index)
              返回指定索引处的字符(Unicode 代码点)。
     int codePointBefore(int index)
              返回指定索引之前的字符(Unicode 代码点)。
     int codePointCount(int beginIndex, int endIndex)
              返回此 String 的指定文本范围中的 Unicode 代码点数。
     int compareTo(String anotherString)
              按字典顺序比较两个字符串。
     int compareToIgnoreCase(String str)
              按字典顺序比较两个字符串,不考虑大小写。
     String concat(String str)
              将指定字符串连接到此字符串的结尾。
     boolean contains(CharSequence s)
              当且仅当此字符串包含指定的 char 值序列时,返回 true。
     boolean contentEquals(CharSequence cs)
              将此字符串与指定的 CharSequence 比较。
     boolean contentEquals(StringBuffer sb)
              将此字符串与指定的 StringBuffer 比较。
    static String copyValueOf(char[] data)
              返回指定数组中表示该字符序列的 String。
    static String copyValueOf(char[] data, int offset, int count)
              返回指定数组中表示该字符序列的 String。
     boolean endsWith(String suffix)
              测试此字符串是否以指定的后缀结束。
     boolean equals(Object anObject)
              将此字符串与指定的对象比较。
     boolean equalsIgnoreCase(String anotherString)
              将此 String 与另一个 String 比较,不考虑大小写。
    static String format(Locale l, String format, Object... args)
              使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
    static String format(String format, Object... args)
              使用指定的格式字符串和参数返回一个格式化字符串。
     byte[] getBytes()
              使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
     byte[] getBytes(Charset charset)
              使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。
     void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin)
              已过时。 该方法无法将字符正确转换为字节。从 JDK 1.1 起,完成该转换的首选方法是通过 getBytes() 方法,该方法使用平台的默认字符集。
     byte[] getBytes(String charsetName)
              使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
     void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
              将字符从此字符串复制到目标字符数组。
     int hashCode()
              返回此字符串的哈希码。
     int indexOf(int ch)
              返回指定字符在此字符串中第一次出现处的索引。
     int indexOf(int ch, int fromIndex)
              返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
     int indexOf(String str)
              返回指定子字符串在此字符串中第一次出现处的索引。
     int indexOf(String str, int fromIndex)
              返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
     String intern()
              返回字符串对象的规范化表示形式。
     boolean isEmpty()
              当且仅当 length()0 时返回 true
     int lastIndexOf(int ch)
              返回指定字符在此字符串中最后一次出现处的索引。
     int lastIndexOf(int ch, int fromIndex)
              返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
     int lastIndexOf(String str)
              返回指定子字符串在此字符串中最右边出现处的索引。
     int lastIndexOf(String str, int fromIndex)
              返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
     int length()
              返回此字符串的长度。
     boolean matches(String regex)
              告知此字符串是否匹配给定的正则表达式
     int offsetByCodePoints(int index, int codePointOffset)
              返回此 String 中从给定的 index 处偏移 codePointOffset 个代码点的索引。
     boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
              测试两个字符串区域是否相等。
     boolean regionMatches(int toffset, String other, int ooffset, int len)
              测试两个字符串区域是否相等。
     String replace(char oldChar, char newChar)
              返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
     String replace(CharSequence target, CharSequence replacement)
              使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
     String replaceAll(String regex, String replacement)
              使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
     String replaceFirst(String regex, String replacement)
              使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
     String[] split(String regex)
              根据给定正则表达式的匹配拆分此字符串。
     String[] split(String regex, int limit)
              根据匹配给定的正则表达式来拆分此字符串。
     boolean startsWith(String prefix)
              测试此字符串是否以指定的前缀开始。
     boolean startsWith(String prefix, int toffset)
              测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
     CharSequence subSequence(int beginIndex, int endIndex)
              返回一个新的字符序列,它是此序列的一个子序列。
     String substring(int beginIndex)
              返回一个新的字符串,它是此字符串的一个子字符串。
     String substring(int beginIndex, int endIndex)
              返回一个新字符串,它是此字符串的一个子字符串。
     char[] toCharArray()
              将此字符串转换为一个新的字符数组。
     String toLowerCase()
              使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
     String toLowerCase(Locale locale)
              使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
     String toString()
              返回此对象本身(它已经是一个字符串!)。
     String toUpperCase()
              使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
     String toUpperCase(Locale locale)
              使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
     String trim()
              返回字符串的副本,忽略前导空白和尾部空白。
    static String valueOf(boolean b)
              返回 boolean 参数的字符串表示形式。
    static String valueOf(char c)
              返回 char 参数的字符串表示形式。
    static String valueOf(char[] data)
              返回 char 数组参数的字符串表示形式。
    static String valueOf(char[] data, int offset, int count)
              返回 char 数组参数的特定子数组的字符串表示形式。
    static String valueOf(double d)
              返回 double 参数的字符串表示形式。
    static String valueOf(float f)
              返回 float 参数的字符串表示形式。
    static String valueOf(int i)
              返回 int 参数的字符串表示形式。
    static String valueOf(long l)
              返回 long 参数的字符串表示形式。
    static String valueOf(Object obj)
              返回 Object 参数的字符串表示形式。

     

    从类 java.lang.Object 继承的方法
    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

     

    字段详细信息

    CASE_INSENSITIVE_ORDER

    public static final Comparator<String> CASE_INSENSITIVE_ORDER
    一个对 String 对象进行排序的 Comparator,作用与 compareToIgnoreCase 相同。此比较器是可序列化的。

    注意,Comparator 考虑语言环境,因此可能导致在某些语言环境中的排序效果不理想。java.text 包提供 Collator 完成与语言环境有关的排序。

    从以下版本开始:
    1.2
    另请参见:
    Collator.compare(String, String)
    构造方法详细信息

    String

    public String()
    初始化一个新创建的 String 对象,使其表示一个空字符序列。注意,由于 String 是不可变的,所以无需使用此构造方法。


    String

    public String(String original)
    初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,除非需要 original 的显式副本。

    参数:
    original - 一个 String

    String

    public String(char[] value)
    分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。该字符数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。

    参数:
    value - 字符串的初始值

    String

    public String(char[] value,
                  int offset,
                  int count)
    分配一个新的 String,它包含取自字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。

    参数:
    value - 作为字符源的数组。
    offset - 初始偏移量。
    count - 长度。
    抛出:
    IndexOutOfBoundsException - 如果 offsetcount 参数索引字符超出 value 数组的范围。

    String

    public String(int[] codePoints,
                  int offset,
                  int count)
    分配一个新的 String,它包含 Unicode 代码点数组参数一个子数组的字符。offset 参数是该子数组第一个代码点的索引,count 参数指定子数组的长度。将该子数组的内容转换为 char;后续对 int 数组的修改不会影响新创建的字符串。

    参数:
    codePoints - 作为 Unicode 代码点的源的数组。
    offset - 初始偏移量。
    count - 长度。
    抛出:
    IllegalArgumentException - 如果在 codePoints 中发现任何无效的 Unicode 代码点
    IndexOutOfBoundsException - 如果 offsetcount 参数索引字符超出 codePoints 数组的范围。
    从以下版本开始:
    1.5

    String

    @Deprecated
    public String(byte[] ascii,
                             int hibyte,
                             int offset,
                             int count)
    已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset、字符集名称,或使用平台默认字符集的 String 构造方法。

    分配一个新的 String,它是根据一个 8 位整数值数组的子数组构造的。

    offset 参数是该子数组的第一个 byte 的索引,count 参数指定子数组的长度。

    子数组中的每个 byte 都按照上述方法转换为 char

    参数:
    ascii - 要转换为字符的 byte。
    hibyte - 每个 16 位 Unicode 代码单元的前 8 位。
    offset - 初始偏移量。
    count - 长度。
    抛出:
    IndexOutOfBoundsException - 如果 offsetcount 参数无效。
    另请参见:
    String(byte[], int), String(byte[], int, int, java.lang.String), String(byte[], int, int, java.nio.charset.Charset), String(byte[], int, int), String(byte[], java.lang.String), String(byte[], java.nio.charset.Charset), String(byte[])

    String

    @Deprecated
    public String(byte[] ascii,
                             int hibyte)
    已过时。 该方法无法将字节正确地转换为字符。从 JDK 1.1 开始,完成该转换的首选方法是使用带有 Charset、字符集名称,或使用平台默认字符集的 String 构造方法。

    分配一个新的 String,它包含根据一个 8 位整数值数组构造的字符。所得字符串中的每个字符 c 都是根据 byte 数组中的相应组件 b 构造的,如下所示:
         c == (char)(((hibyte & 0xff) << 8)
                             | (b & 0xff))
     

    参数:
    ascii - 要转换为字符的 byte。
    hibyte - 每个 16 位 Unicode 代码单元的前 8 位。
    另请参见:
    String(byte[], int, int, java.lang.String), String(byte[], int, int, java.nio.charset.Charset), String(byte[], int, int), String(byte[], java.lang.String), String(byte[], java.nio.charset.Charset), String(byte[])

    String

    public String(byte[] bytes,
                  int offset,
                  int length,
                  String charsetName)
           throws UnsupportedEncodingException
    通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。新 String 的长度是一个字符集函数,因此可能不等于子数组的长度。

    当给定 byte 在给定字符集中无效的情况下,此构造方法的行为没有指定。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。

    参数:
    bytes - 要解码为字符的 byte
    offset - 要解码的第一个 byte 的索引
    length - 要解码的 byte 数
    charsetName - 受支持 charset 的名称
    抛出:
    UnsupportedEncodingException - 如果指定的字符集不受支持
    IndexOutOfBoundsException - 如果 offsetlength 参数索引字符超出 bytes 数组的范围
    从以下版本开始:
    JDK1.1

    String

    public String(byte[] bytes,
                  int offset,
                  int length,
                  Charset charset)
    通过使用指定的 charset 解码指定的 byte 子数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于子数组的长度。

    此方法总是使用此字符集的默认替代字符串替代错误输入 (malformed-input) 和不可映射字符 (unmappable-character) 序列。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。

    参数:
    bytes - 要解码为字符的 byte
    offset - 要解码的第一个 byte 的索引
    length - 要解码的 byte 数
    charset - 用来解码 bytes charset
    抛出:
    IndexOutOfBoundsException - 如果 offsetlength 参数索引字符超出 bytes 数组的边界
    从以下版本开始:
    1.6

    String

    public String(byte[] bytes,
                  String charsetName)
           throws UnsupportedEncodingException
    通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。

    当给定 byte 在给定字符集中无效的情况下,此构造方法的行为没有指定。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。

    参数:
    bytes - 要解码为字符的 byte
    charsetName - 受支持的 charset 的名称
    抛出:
    UnsupportedEncodingException - 如果指定字符集不受支持
    从以下版本开始:
    JDK1.1

    String

    public String(byte[] bytes,
                  Charset charset)
    通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。

    此方法总是使用此字符集的默认替代字符串替代错误输入和不可映射字符序列。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。

    参数:
    bytes - 要解码为字符的 byte
    charset - 要用来解码 bytes charset
    从以下版本开始:
    1.6

    String

    public String(byte[] bytes,
                  int offset,
                  int length)
    通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于该子数组的长度。

    当给定 byte 在给定字符集中无效的情况下,此构造方法的行为没有指定。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。

    参数:
    bytes - 要解码为字符的 byte
    offset - 要解码的第一个 byte 的索引
    length - 要解码的 byte 数
    抛出:
    IndexOutOfBoundsException - 如果 offsetlength 参数索引字符超出 bytes 数组的范围
    从以下版本开始:
    JDK1.1

    String

    public String(byte[] bytes)
    通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。

    当给定 byte 在给定字符集中无效的情况下,此构造方法的行为没有指定。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。

    参数:
    bytes - 要解码为字符的 byte
    从以下版本开始:
    JDK1.1

    String

    public String(StringBuffer buffer)
    分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。该字符串缓冲区的内容已被复制,后续对它的修改不会影响新创建的字符串。

    参数:
    buffer - 一个 StringBuffer

    String

    public String(StringBuilder builder)
    分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。该字符串生成器的内容已被复制,后续对它的修改不会影响新创建的字符串。

    提供此构造方法是为了简化到 StringBuilder 的迁移。通过 toString 方法从字符串生成器中获取字符串可能运行的更快,因此通常作为首选。

    参数:
    builder - 一个 StringBuilder
    从以下版本开始:
    1.5
    方法详细信息

    length

    public int length()
    返回此字符串的长度。长度等于字符串中 Unicode 代码单元的数量。

    指定者:
    接口 CharSequence 中的 length
    返回:
    此对象表示的字符序列的长度。

    isEmpty

    public boolean isEmpty()
    当且仅当 length()0 时返回 true

    返回:
    如果 length()0,则返回 true;否则返回 false
    从以下版本开始:
    1.6

    charAt

    public char charAt(int index)
    返回指定索引处的 char 值。索引范围为从 0length() - 1。序列的第一个 char 值位于索引 0 处,第二个位于索引 1 处,依此类推,这类似于数组索引。

    如果索引指定的 char 值是代理项,则返回代理项值。

    指定者:
    接口 CharSequence 中的 charAt
    参数:
    index - char 值的索引。
    返回:
    此字符串指定索引处的 char 值。第一个 char 值位于索引 0 处。
    抛出:
    IndexOutOfBoundsException - 如果 index 参数为负或小于此字符串的长度。

    codePointAt

    public int codePointAt(int index)
    返回指定索引处的字符(Unicode 代码点)。索引引用 char 值(Unicode 代码单元),其范围从 0length() - 1

    如果给定索引指定的 char 值属于高代理项范围,则后续索引小于此 String 的长度;如果后续索引处的 char 值属于低代理项范围,则返回该代理项对相应的增补代码点。否则,返回给定索引处的 char 值。

    参数:
    index - char 值的索引
    返回:
    index 处字符的代码点值
    抛出:
    IndexOutOfBoundsException - 如果 index 参数为负或小于此字符串的长度。
    从以下版本开始:
    1.5

    codePointBefore

    public int codePointBefore(int index)
    返回指定索引之前的字符(Unicode 代码点)。索引引用 char 值(Unicode 代码单元),其范围从 1length

    如果 (index - 1) 处的 char 值属于低代理项范围,则 (index - 2) 为非负;如果 (index - 2) 处的 char 值属于高低理项范围,则返回该代理项对的增补代码点值。如果 index - 1 处的 char 值是未配对的低(高)代理项,则返回代理项值。

    参数:
    index - 应返回的代码点之后的索引
    返回:
    给定索引前面的 Unicode 代码点。
    抛出:
    IndexOutOfBoundsException - 如果 index 参数小于 1 或大于此字符串的长度。
    从以下版本开始:
    1.5

    codePointCount

    public int codePointCount(int beginIndex,
                              int endIndex)
    返回此 String 的指定文本范围中的 Unicode 代码点数。文本范围始于指定的 beginIndex,一直到索引 endIndex - 1 处的 char。因此,该文本范围的长度(用 char 表示)是 endIndex-beginIndex。该文本范围内每个未配对的代理项计为一个代码点。

    参数:
    beginIndex - 文本范围的第一个 char 的索引。
    endIndex - 文本范围的最后一个 char 之后的索引。
    返回:
    指定文本范围中 Unicode 代码点的数量
    抛出:
    IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 的长度,或 beginIndex 大于 endIndex
    从以下版本开始:
    1.5

    offsetByCodePoints

    public int offsetByCodePoints(int index,
                                  int codePointOffset)
    返回此 String 中从给定的 index 处偏移 codePointOffset 个代码点的索引。文本范围内由 indexcodePointOffset 给定的未配对代理项各计为一个代码点。

    参数:
    index - 要偏移的索引
    codePointOffset - 代码点中的偏移量
    返回:
    String 的索引
    抛出:
    IndexOutOfBoundsException - 如果 index 为负或大于此 String 的长度;或者 codePointOffset 为正,且以 index 开头子字符串的代码点比 codePointOffset 少;如果 codePointOffset 为负,且 index 前面子字符串的代码点比 codePointOffset 的绝对值少。
    从以下版本开始:
    1.5

    getChars

    public void getChars(int srcBegin,
                         int srcEnd,
                         char[] dst,
                         int dstBegin)
    将字符从此字符串复制到目标字符数组。

    要复制的第一个字符位于索引 srcBegin 处;要复制的最后一个字符位于索引 srcEnd-1 处(因此要复制的字符总数是 srcEnd-srcBegin)。要复制到 dst 子数组的字符从索引 dstBegin 处开始,并结束于索引:

         dstbegin + (srcEnd-srcBegin) - 1
     

    参数:
    srcBegin - 字符串中要复制的第一个字符的索引。
    srcEnd - 字符串中要复制的最后一个字符之后的索引。
    dst - 目标数组。
    dstBegin - 目标数组中的起始偏移量。
    抛出:
    IndexOutOfBoundsException - 如果下列任何一项为 true:
    • srcBegin 为负。
    • srcBegin 大于 srcEnd
    • srcEnd 大于此字符串的长度
    • dstBegin 为负
    • dstBegin+(srcEnd-srcBegin) 大于 dst.length

    getBytes

    @Deprecated
    public void getBytes(int srcBegin,
                                    int srcEnd,
                                    byte[] dst,
                                    int dstBegin)
    已过时。 该方法无法将字符正确转换为字节。从 JDK 1.1 起,完成该转换的首选方法是通过 getBytes() 方法,该方法使用平台的默认字符集。

    将字符从此字符串复制到目标 byte 数组中。每个 byte 接收相应字符的 8 个低位。不复制每个字符的高位,它们不参与任何方式的转换。

    要复制的第一个字符位于索引 srcBegin 处;要复制的最后一个字符位于索引 srcEnd-1 处。要复制的字符总数为 srcEnd-srcBegin。将转换为 byte 的字符复制到 dst 的子数组中,从索引 dstBegin 处开始,并结束于索引:

         dstbegin + (srcEnd-srcBegin) - 1
     

    参数:
    srcBegin - 字符串中要复制的第一个字符的索引
    srcEnd - 字符串中要复制的最后一个字符之后的索引
    dst - 目标数组
    dstBegin - 目标数组中的起始偏移量
    抛出:
    IndexOutOfBoundsException - 如果下列任何一项为 true:
    • srcBegin 为负
    • srcBegin 大于 srcEnd
    • srcEnd 大于此 String 的长度
    • dstBegin 为负
    • dstBegin+(srcEnd-srcBegin) 大于 dst.length

    getBytes

    public byte[] getBytes(String charsetName)
                    throws UnsupportedEncodingException
    使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

    当此字符串不能使用给定的字符集编码时,此方法的行为没有指定。如果需要对编码过程进行更多控制,则应该使用 CharsetEncoder 类。

    参数:
    charsetName - 受支持的 charset 名称
    返回:
    所得 byte 数组
    抛出:
    UnsupportedEncodingException - 如果指定的字符集不受支持
    从以下版本开始:
    JDK1.1

    getBytes

    public byte[] getBytes(Charset charset)
    使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。

    此方法总是使用此字符集的默认替代 byte 数组替代错误输入和不可映射字符序列。如果需要对编码过程进行更多控制,则应该使用 CharsetEncoder 类。

    参数:
    charset - 用于编码 String Charset
    返回:
    所得 byte 数组
    从以下版本开始:
    1.6

    getBytes

    public byte[] getBytes()
    使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

    当此字符串不能使用默认的字符集编码时,此方法的行为没有指定。如果需要对编码过程进行更多控制,则应该使用 CharsetEncoder 类。

    返回:
    所得 byte 数组
    从以下版本开始:
    JDK1.1

    equals

    public boolean equals(Object anObject)
    将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true

    覆盖:
    Object 中的 equals
    参数:
    anObject - 与此 String 进行比较的对象。
    返回:
    如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false
    另请参见:
    compareTo(String), equalsIgnoreCase(String)

    contentEquals

    public boolean contentEquals(StringBuffer sb)
    将此字符串与指定的 StringBuffer 比较。当且仅当此 String 与指定 StringBuffer 表示相同的字符序列时,结果才为 true

    参数:
    sb - 要与此 String 比较的 StringBuffer
    返回:
    如果此 String 与指定 StringBuffer 表示相同的字符序列,则返回 true;否则返回 false
    从以下版本开始:
    1.4

    contentEquals

    public boolean contentEquals(CharSequence cs)
    将此字符串与指定的 CharSequence 比较。当且仅当此 String 与指定序列表示相同的 char 值序列时,结果才为 true

    参数:
    cs - 要与此 String 比较的序列
    返回:
    如果此 String 与指定序列表示相同的 char 值序列,则返回 true;否则返回 false
    从以下版本开始:
    1.5

    equalsIgnoreCase

    public boolean equalsIgnoreCase(String anotherString)
    将此 String 与另一个 String 比较,不考虑大小写。如果两个字符串的长度相同,并且其中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。

    在忽略大小写的情况下,如果下列至少一项为 true,则认为 c1c2 这两个字符相同。

    参数:
    anotherString - 与此 String 进行比较的 String
    返回:
    如果参数不为 null,且这两个 String 相等(忽略大小写),则返回 true;否则返回 false
    另请参见:
    equals(Object)

    compareTo

    public int compareTo(String anotherString)
    按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object) 返回 true 时才返回 0

    这是字典排序的定义。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设 k 是这类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 < 运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值:

     this.charAt(k)-anotherString.charAt(k)
     
    如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差,即值:
     this.length()-anotherString.length()
     

    指定者:
    接口 Comparable<String> 中的 compareTo
    参数:
    anotherString - 要比较的 String
    返回:
    如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。

    compareToIgnoreCase

    public int compareToIgnoreCase(String str)
    按字典顺序比较两个字符串,不考虑大小写。此方法返回一个整数,其符号与使用规范化的字符串调用 compareTo 所得符号相同,规范化字符串的大小写差异已通过对每个字符调用 Character.toLowerCase(Character.toUpperCase(character)) 消除。

    注意,此方法 考虑语言环境,因此可能导致在某些语言环境中的排序效果不理想。java.text 包提供 Collators 完成与语言环境有关的排序。

    参数:
    str - 要比较的 String
    返回:
    根据指定 String 大于、等于还是小于此 String(不考虑大小写),分别返回一个负整数、0 或一个正整数。
    从以下版本开始:
    1.2
    另请参见:
    Collator.compare(String, String)

    regionMatches

    public boolean regionMatches(int toffset,
                                 String other,
                                 int ooffset,
                                 int len)
    测试两个字符串区域是否相等。

    将此 String 对象的一个子字符串与参数 other 的一个子字符串进行比较。如果这两个子字符串表示相同的字符序列,则结果为 true。要比较的此 String 对象的子字符串从索引 toffset 处开始,长度为 len。要比较的 other 的子字符串从索引 ooffset 处开始,长度为 len。当且仅当下列至少一项为 true 时,结果才为 false

    • toffset 为负。
    • ooffset 为负。
    • toffset+len 大于此 String 对象的长度。
    • ooffset+len 大于另一个参数的长度。
    • 存在某个小于 len 的非负整数 k,它满足:this.charAt(toffset+k) != other.charAt(ooffset+k)

    参数:
    toffset - 字符串中子区域的起始偏移量。
    other - 字符串参数。
    ooffset - 字符串参数中子区域的起始偏移量。
    len - 要比较的字符数。
    返回:
    如果此字符串的指定子区域完全匹配字符串参数的指定子区域,则返回 true;否则返回 false

    regionMatches

    public boolean regionMatches(boolean ignoreCase,
                                 int toffset,
                                 String other,
                                 int ooffset,
                                 int len)
    测试两个字符串区域是否相等。

    将此 String 对象的子字符串与参数 other 的子字符串进行比较。如果这两个子字符串表示相同的字符序列,则结果为 true,当且仅当 ignoreCase 为 true 时忽略大小写。要比较的此 String 对象的子字符串从索引 toffset 处开始,长度为 len。要比较的 other 的子字符串从索引 ooffset 处开始,长度为 len。当且仅当下列至少一项为 true 时,结果才为 false

    • toffset 为负。
    • ooffset 为负。
    • toffset+len 大于此 String 对象的长度。
    • ooffset+len 大于另一个参数的长度。
    • ignoreCasefalse,且存在某个小于 len 的非负整数 k,即:
       this.charAt(toffset+k) != other.charAt(ooffset+k)
       
    • ignoreCasetrue,且存在某个小于 len 的非负整数 k,即:
       Character.toLowerCase(this.charAt(toffset+k)) !=
                     Character.toLowerCase(other.charAt(ooffset+k))
       
      以及:
       Character.toUpperCase(this.charAt(toffset+k)) !=
               Character.toUpperCase(other.charAt(ooffset+k))
       

    参数:
    ignoreCase - 如果为 true,则比较字符时忽略大小写。
    toffset - 此字符串中子区域的起始偏移量。
    other - 字符串参数。
    toffset - 字符串参数中子区域的起始偏移量。
    len - 要比较的字符数。
    返回:
    如果此字符串的指定子区域匹配字符串参数的指定子区域,则返回 true;否则返回 false。是否完全匹配或考虑大小写取决于 ignoreCase 参数。

    startsWith

    public boolean startsWith(String prefix,
                              int toffset)
    测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

    参数:
    prefix - 前缀。
    toffset - 在此字符串中开始查找的位置。
    返回:
    如果参数表示的字符序列是此对象从索引 toffset 处开始的子字符串前缀,则返回 true;否则返回 false。如果 toffset 为负或大于此 String 对象的长度,则结果为 false;否则结果与以下表达式的结果相同:
              this.substring(toffset).startsWith(prefix)
              

    startsWith

    public boolean startsWith(String prefix)
    测试此字符串是否以指定的前缀开始。

    参数:
    prefix - 前缀。
    返回:
    如果参数表示的字符序列是此字符串表示的字符序列的前缀,则返回 true;否则返回 false。还要注意,如果参数是空字符串,或者等于此 String 对象(用 equals(Object) 方法确定),则返回 true
    从以下版本开始:
    1. 0

    endsWith

    public boolean endsWith(String suffix)
    测试此字符串是否以指定的后缀结束。

    参数:
    suffix - 后缀。
    返回:
    如果参数表示的字符序列是此对象表示的字符序列的后缀,则返回 true;否则返回 false。注意,如果参数是空字符串,或者等于此 String 对象(用 equals(Object) 方法确定),则结果为 true

    hashCode

    public int hashCode()
    返回此字符串的哈希码。String 对象的哈希码根据以下公式计算:
     s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
     
    使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希值为 0。)

    覆盖:
    Object 中的 hashCode
    返回:
    此对象的哈希码值。
    另请参见:
    Object.equals(java.lang.Object), Hashtable

    indexOf

    public int indexOf(int ch)
    返回指定字符在此字符串中第一次出现处的索引。如果在此 String 对象表示的字符序列中出现值为 ch 的字符,则返回第一次出现该字符的索引(以 Unicode 代码单元表示)。对于 0 到 0xFFFF(包括 0 和 0xFFFF)范围内的 ch 的值,返回值是
     this.charAt(k) == ch
     
    为 true 的最小 k 值。对于其他 ch 值,返回值是
     this.codePointAt(k) == ch
     
    为 true 最小 k 值。无论哪种情况,如果此字符串中没有这样的字符,则返回 -1

    参数:
    ch - 一个字符(Unicode 代码点)。
    返回:
    在此对象表示的字符序列中第一次出现该字符的索引;如果未出现该字符,则返回 -1

    indexOf

    public int indexOf(int ch,
                       int fromIndex)
    返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

    在此 String 对象表示的字符序列中,如果带有值 ch 的字符的索引不小于 fromIndex,则返回第一次出现该值的索引。对于 0 到 0xFFFF(包括 0 和 0xFFFF)范围内的 ch 值,返回值是

     (this.charAt(k) == ch) && (k >= fromIndex)
     
    为 true 的最小 k 值。对于其他 ch 值,返回值是
     (this.codePointAt(k) == ch) && (k >= fromIndex)
     
    为 true 的最小 k 值。无论哪种情况,如果此字符串中 fromIndex 或之后的位置没有这样的字符出现,则返回 -1

    fromIndex 的值没有限制。如果它为负,则与它为 0 的效果同样:将搜索整个字符串。如果它大于此字符串的长度,则与它等于此字符串长度的效果相同:返回 -1

    所有索引都在 char 值中指定(Unicode 代码单元)。

    参数:
    ch - 一个字符(Unicode 代码点)。
    fromIndex - 开始搜索的索引。
    返回:
    在此对象表示的字符序列中第一次出现的大于或等于 fromIndex 的字符的索引;如果未出现该字符,则返回 -1

    lastIndexOf

    public int lastIndexOf(int ch)
    返回指定字符在此字符串中最后一次出现处的索引。对于 0 到 0xFFFF(包括 0 和 0xFFFF)范围内的 ch 的值,返回的索引(Unicode 代码单元)是
     this.charAt(k) == ch
     
    为 true 最大 k 值。对于其他 ch 值,返回值是
     this.codePointAt(k) == ch
     
    为 true 的最大 k 值。无论哪种情况,如果此字符串中没有这样的字符出现,则返回 -1。从最后一个字符开始反向搜索此 String

    参数:
    ch - 一个字符(Unicode 代码点)。
    返回:
    在此对象表示的字符序列中最后一次出现该字符的索引;如果未出现该字符,则返回 -1

    lastIndexOf

    public int lastIndexOf(int ch,
                           int fromIndex)
    返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。对于 0 到 0xFFFF(包括 0 和 0xFFFF)范围内的 ch 值,返回的索引是
     (this.charAt(k) == ch) && (k <= fromIndex)
     
    为 true 的最大 k 值。对于 ch 的其他值,返回值是
     (this.codePointAt(k) == ch) && (k <= fromIndex)
     
    为 true 的最大 k 值。无论哪种情况,如果此字符串中 fromIndex 或之前的位置没有这样的字符出现,则返回 -1

    所有的索引都以 char 值指定(Unicode 代码单元)。

    参数:
    ch - 一个字符(Unicode 代码点)。
    fromIndex - 开始搜索的索引。fromIndex 的值没有限制。如果它大于等于此字符串的长度,则与它小于此字符串长度减 1 的效果相同:将搜索整个字符串。如果它为负,则与它为 -1 的效果相同:返回 -1。
    返回:
    在此对象表示的字符序列(小于等于 fromIndex)中最后一次出现该字符的索引;如果在该点之前未出现该字符,则返回 -1

    indexOf

    public int indexOf(String str)
    返回指定子字符串在此字符串中第一次出现处的索引。返回的整数是
     this.startsWith(str, k)
     
    true 的最小 k 值。

    参数:
    str - 任意字符串。
    返回:
    如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这种子字符串的第一个字符的索引;如果它不作为一个子字符串出现,则返回 -1

    indexOf

    public int indexOf(String str,
                       int fromIndex)
    返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。返回的整数是满足下式的最小 k 值:
         k >= Math.min(fromIndex, this.length()) && this.startsWith(str, k)
     
    如果不存在这样的 k 值,则返回 -1。

    参数:
    str - 要搜索的子字符串。
    fromIndex - 开始搜索的索引位置。
    返回:
    指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

    lastIndexOf

    public int lastIndexOf(String str)
    返回指定子字符串在此字符串中最右边出现处的索引。将最右边的空字符串 "" 视为出现在索引值 this.length() 处。返回的索引是
     this.startsWith(str, k)
     
    为 true 的最大 k 值。

    参数:
    str - 要搜索的子字符串。
    返回:
    如果字符串参数作为一个子字符串在此对象中出现一次或多次,则返回最后一个这种子字符串的第一个字符。如果它不作为一个子字符串出现,则返回 -1

    lastIndexOf

    public int lastIndexOf(String str,
                           int fromIndex)
    返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。返回的整数是满足下式的最大 k 值:
         k <= Math.min(fromIndex,this.length()) && this.startsWith(str, k)
     
    如果不存在这样的 k 值,则返回 -1。

    参数:
    str - 要搜索的子字符串。
    fromIndex - 开始搜索的索引位置。
    返回:
    指定子字符串在此字符串中最后一次出现处的索引。

    substring

    public String substring(int beginIndex)
    返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。

    示例:

     "unhappy".substring(2) returns "happy"
     "Harbison".substring(3) returns "bison"
     "emptiness".substring(9) returns "" (an empty string)
     

    参数:
    beginIndex - 起始索引(包括)。
    返回:
    指定的子字符串。
    抛出:
    IndexOutOfBoundsException - 如果 beginIndex 为负或大于此 String 对象的长度。

    substring

    public String substring(int beginIndex,
                            int endIndex)
    返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex

    示例:

     "hamburger".substring(4, 8) returns "urge"
     "smiles".substring(1, 5) returns "mile"
     

    参数:
    beginIndex - 起始索引(包括)。
    endIndex - 结束索引(不包括)。
    返回:
    指定的子字符串。
    抛出:
    IndexOutOfBoundsException - 如果 beginIndex 为负,或 endIndex 大于此 String 对象的长度,或 beginIndex 大于 endIndex

    subSequence

    public CharSequence subSequence(int beginIndex,
                                    int endIndex)
    返回一个新的字符序列,它是此序列的一个子序列。

    此方法这种形式的调用:

     str.subSequence(begin, end)
    与以下调用的行为完全相同:
     str.substring(begin, end)
    定义此方法使 String 类能够实现 CharSequence 接口。

    指定者:
    接口 CharSequence 中的 subSequence
    参数:
    beginIndex - 起始索引(包括)。
    endIndex - 结束索引(不包括)。
    返回:
    指定子序列。
    抛出:
    IndexOutOfBoundsException - 如果 beginIndexendIndex 为负,如果 endIndex 大于 length()beginIndex 大于 startIndex
    从以下版本开始:
    1.4

    concat

    public String concat(String str)
    将指定字符串连接到此字符串的结尾。

    如果参数字符串的长度为 0,则返回此 String 对象。否则,创建一个新的 String 对象,用来表示由此 String 对象表示的字符序列和参数字符串表示的字符序列连接而成的字符序列。

    示例:

     "cares".concat("s") returns "caress"
     "to".concat("get").concat("her") returns "together"
     

    参数:
    str - 连接到此 String 结尾的 String
    返回:
    一个字符串,它表示在此对象字符后连接字符串参数字符而成的字符。

    replace

    public String replace(char oldChar,
                          char newChar)
    返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

    如果 oldChar 在此 String 对象表示的字符序列中没有出现,则返回对此 String 对象的引用。否则,创建一个新的 String 对象,它所表示的字符序列除了所有的 oldChar 都被替换为 newChar 之外,与此 String 对象表示的字符序列相同。

    示例:

    "mesquite in your cellar".replace('e', 'o')
             returns "mosquito in your collar"
     "the war of baronets".replace('r', 'y')
             returns "the way of bayonets"
     "sparring with a purple porpoise".replace('p', 't')
             returns "starring with a turtle tortoise"
     "JonL".replace('q', 'x') returns "JonL" (no change)
     

    参数:
    oldChar - 原字符。
    newChar - 新字符。
    返回:
    一个从此字符串派生的字符串,它将此字符串中的所有 oldChar 替代为 newChar

    matches

    public boolean matches(String regex)
    告知此字符串是否匹配给定的正则表达式

    调用此方法的 str.matches(regex) 形式与以下表达式产生的结果完全相同:

    Pattern.matches(regex, str)

    参数:
    regex - 用来匹配此字符串的正则表达式
    返回:
    当且仅当此字符串匹配给定的正则表达式时,返回 true
    抛出:
    PatternSyntaxException - 如果正则表达式的语法无效
    从以下版本开始:
    1.4
    另请参见:
    Pattern

    contains

    public boolean contains(CharSequence s)
    当且仅当此字符串包含指定的 char 值序列时,返回 true。

    参数:
    s - 要搜索的序列
    返回:
    如果此字符串包含 s,则返回 true,否则返回 false
    抛出:
    NullPointerException - 如果 snull
    从以下版本开始:
    1.5

    replaceFirst

    public String replaceFirst(String regex,
                               String replacement)
    使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

    调用此方法的 str.replaceFirst(regex, repl) 形式与以下表达式产生的结果完全相同:

    Pattern.compile(regex).matcher(str).replaceFirst(repl)

    注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceFirst(java.lang.String)。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。

    参数:
    regex - 用来匹配此字符串的正则表达式
    replacement - 用来替换第一个匹配项的字符串
    返回:
    所得 String
    抛出:
    PatternSyntaxException - 如果正则表达式的语法无效
    从以下版本开始:
    1.4
    另请参见:
    Pattern

    replaceAll

    public String replaceAll(String regex,
                             String replacement)
    使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

    调用此方法的 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同:

    Pattern.compile(regex).matcher(str).replaceAll(repl)

    注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceAll。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。

    参数:
    regex - 用来匹配此字符串的正则表达式
    replacement - 用来替换每个匹配项的字符串
    返回:
    所得 String
    抛出:
    PatternSyntaxException - 如果正则表达式的语法无效
    从以下版本开始:
    1.4
    另请参见:
    Pattern

    replace

    public String replace(CharSequence target,
                          CharSequence replacement)
    使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。该替换从字符串的开头朝末尾执行,例如,用 "b" 替换字符串 "aaa" 中的 "aa" 将生成 "ba" 而不是 "ab"。

    参数:
    target - 要被替换的 char 值序列
    replacement - char 值的替换序列
    返回:
    所得 String
    抛出:
    NullPointerException - 如果 targetreplacementnull
    从以下版本开始:
    1.5

    split

    public String[] split(String regex,
                          int limit)
    根据匹配给定的正则表达式来拆分此字符串。

    此方法返回的数组包含此字符串的子字符串,每个子字符串都由另一个匹配给定表达式的子字符串终止,或者由此字符串末尾终止。数组中的子字符串按它们在此字符串中出现的顺序排列。如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。

    limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。

    例如,字符串 "boo:and:foo" 使用这些参数可生成以下结果:

    Regex Limit 结果
    : 2 { "boo", "and:foo" }
    : 5 { "boo", "and", "foo" }
    : -2 { "boo", "and", "foo" }
    o 5 { "b", "", ":and:f", "", "" }
    o -2 { "b", "", ":and:f", "", "" }
    o 0 { "b", "", ":and:f" }

    调用此方法的 str.split(regex, n) 形式与以下表达式产生的结果完全相同:

    Pattern.compile(regex).split(str, n)

    参数:
    regex - 定界正则表达式
    limit - 结果阈值,如上所述
    返回:
    字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
    抛出:
    PatternSyntaxException - 如果正则表达式的语法无效
    从以下版本开始:
    1.4
    另请参见:
    Pattern

    split

    public String[] split(String regex)
    根据给定正则表达式的匹配拆分此字符串。

    该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。

    例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:

    Regex 结果
    : { "boo", "and", "foo" }
    o { "b", "", ":and:f" }

    参数:
    regex - 定界正则表达式
    返回:
    字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
    抛出:
    PatternSyntaxException - 如果正则表达式的语法无效
    从以下版本开始:
    1.4
    另请参见:
    Pattern

    toLowerCase

    public String toLowerCase(Locale locale)
    使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。大小写映射关系基于 Character 类指定的 Unicode 标准版。由于大小写映射关系并不总是 1:1 的字符映射关系,因此所得 String 的长度可能不同于原 String

    下表中给出了几个小写映射关系的示例:

    语言环境的代码 大写字母 小写字母 描述
    tr (Turkish) \u0130 \u0069 大写字母 I,上面有点 -> 小写字母 i
    tr (Turkish) \u0049 \u0131 大写字母 I -> 小写字母 i,无点
    (all) French Fries french fries 将字符串中的所有字符都小写
    (all) capiotacapchicapthetacapupsilcapsigma iotachithetaupsilonsigma 将字符串中的所有字符都小写

    参数:
    locale - 使用此语言环境的大小写转换规则
    返回:
    要转换为小写的 String
    从以下版本开始:
    1.1
    另请参见:
    toLowerCase(), toUpperCase(), toUpperCase(Locale)

    toLowerCase

    public String toLowerCase()
    使用默认语言环境的规则将此 String 中的所有字符都转换为小写。这等效于调用 toLowerCase(Locale.getDefault())

    注: 此方法与语言环境有关,如果用于应独立于语言环境解释的字符串,则可能生成不可预料的结果。示例有编程语言标识符、协议键、HTML 标记。例如,"TITLE".toLowerCase() 在 Turkish(土耳其语)语言环境中返回 "t?tle",其中“?”是 LATIN SMALL LETTER DOTLESS I 字符。对于与语言环境有关的字符,要获得正确的结果,请使用 toLowerCase(Locale.ENGLISH)

    返回:
    要转换为小写的 String
    另请参见:
    toLowerCase(Locale)

    toUpperCase

    public String toUpperCase(Locale locale)
    使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。大小写映射关系基于 Character 类指定的 Unicode 标准版。由于大小写映射关系并不总是 1:1 的字符映射关系,因此所得 String 的长度可能不同于原 String

    下表中给出了几个与语言环境有关和 1:M 大小写映射关系的一些示例。

    语言环境的代码 小写 大写 描述
    tr (Turkish) \u0069 \u0130 小写字母 i -> 大写字母 I,上面有点
    tr (Turkish) \u0131 \u0049 小写字母 i,无点 -> 大写字母 I
    (all) \u00df \u0053 \u0053 小写字母 sharp s -> 两个字母:SS
    (all) Fahrvergnügen FAHRVERGNÜN  

    参数:
    locale - 使用此语言环境的大小写转换规则
    返回:
    要转换为大写的 String
    从以下版本开始:
    1.1
    另请参见:
    toUpperCase(), toLowerCase(), toLowerCase(Locale)

    toUpperCase

    public String toUpperCase()
    使用默认语言环境的规则将此 String 中的所有字符都转换为大写。此方法等效于 toUpperCase(Locale.getDefault())

    注: 此方法与语言环境有关,如果用于应独立于语言环境解释的字符串,则可能生成不可预料的结果。示例有编程语言标识符、协议键、HTML 标记。例如,"title".toUpperCase() 在 Turkish(土耳其语)语言环境中返回 "T?TLE",其中“?”是 LATIN CAPITAL LETTER I WITH DOT ABOVE 字符。对于与语言环境有关的字符,要获得正确的结果,请使用 toUpperCase(Locale.ENGLISH)

    返回:
    要转换为大写的 String
    另请参见:
    toUpperCase(Locale)

    trim

    public String trim()
    返回字符串的副本,忽略前导空白和尾部空白。

    如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020'(空格字符),则返回对此 String 对象的引用。

    否则,若字符串中没有代码大于 '\u0020' 的字符,则创建并返回一个表示空字符串的新 String 对象。

    否则,假定 k 为字符串中代码大于 '\u0020' 的第一个字符的索引,m 为字符串中代码大于 '\u0020' 的最后一个字符的索引。创建一个新的 String 对象,它表示此字符串中从索引 k 处的字符开始,到索引 m 处的字符结束的子字符串,即 this.substring(km+1) 的结果。

    此方法可用于截去字符串开头和末尾的空白(如上所述)。

    返回:
    此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串。

    toString

    public String toString()
    返回此对象本身(它已经是一个字符串!)。

    指定者:
    接口 CharSequence 中的 toString
    覆盖:
    Object 中的 toString
    返回:
    字符串本身。

    toCharArray

    public char[] toCharArray()
    将此字符串转换为一个新的字符数组。

    返回:
    一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初始化为包含此字符串表示的字符序列。

    format

    public static String format(String format,
                                Object... args)
    使用指定的格式字符串和参数返回一个格式化字符串。

    始终使用 Locale.getDefault() 返回的语言环境。

    参数:
    format - 格式字符串
    args - 格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数的数目是可变的,可以为 0。参数的最大数目受 Java Virtual Machine Specification 所定义的 Java 数组最大维度的限制。有关 null 参数的行为依赖于转换
    返回:
    一个格式化字符串
    抛出:
    IllegalFormatException - 如果格式字符串中包含非法语法、与给定的参数不兼容的格式说明符,格式字符串给定的参数不够,或者存在其他非法条件。有关所有可能的格式化错误的规范,请参阅 formatter 类规范的详细信息 一节。
    NullPointerException - 如果 formatnull
    从以下版本开始:
    1.5
    另请参见:
    Formatter

    format

    public static String format(Locale l,
                                String format,
                                Object... args)
    使用指定的语言环境、格式字符串和参数返回一个格式化字符串。

    参数:
    l - 格式化过程中要应用的语言环境。如果 lnull,则不进行本地化。
    format - 格式字符串
    args - 格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数的数目是可变的,可以为 0。参数的最大数目受 Java Virtual Machine Specification 所定义的 Java 数组最大维度的限制。有关 null 参数的行为依赖于转换
    返回:
    一个格式化字符串
    抛出:
    IllegalFormatException - 如果格式字符串中包含非法语法、与给定参数不兼容的格式说明符,格式字符串给定的参数不够,或存在其他非法条件。有关所有可能的格式化错误的规范,请参阅 formatter 类规范的详细信息 一节。
    NullPointerException - 如果 formatnull
    从以下版本开始:
    1.5
    另请参见:
    Formatter

    valueOf

    public static String valueOf(Object obj)
    返回 Object 参数的字符串表示形式。

    参数:
    obj - 一个 Object
    返回:
    如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值。
    另请参见:
    Object.toString()

    valueOf

    public static String valueOf(char[] data)
    返回 char 数组参数的字符串表示形式。字符数组的内容已被复制,后续修改不会影响新创建的字符串。

    参数:
    data - char 数组。
    返回:
    一个新分配的字符串,它表示包含在字符数组参数中的相同字符序列。

    valueOf

    public static String valueOf(char[] data,
                                 int offset,
                                 int count)
    返回 char 数组参数的特定子数组的字符串表示形式。

    offset 参数是子数组的第一个字符的索引。count 参数指定子数组的长度。字符数组的内容已被复制,后续修改不会影响新创建的字符串。

    参数:
    data - 字符数组。
    offset - String 值的初始偏移量。
    count - String 值的长度。
    返回:
    一个字符串,它表示在字符数组参数的子数组中包含的字符序列。
    抛出:
    IndexOutOfBoundsException - 如果 offset 为负,count 为负,或者 offset+count 大于 data.length

    copyValueOf

    public static String copyValueOf(char[] data,
                                     int offset,
                                     int count)
    返回指定数组中表示该字符序列的 String。

    参数:
    data - 字符数组。
    offset - 子数组的初始偏移量。
    count - 子数组的长度。
    返回:
    一个 String,它包含字符数组的指定子数组的字符。

    copyValueOf

    public static String copyValueOf(char[] data)
    返回指定数组中表示该字符序列的 String。

    参数:
    data - 字符数组。
    返回:
    一个 String,它包含字符数组的字符。

    valueOf

    public static String valueOf(boolean b)
    返回 boolean 参数的字符串表示形式。

    参数:
    b - 一个 boolean
    返回:
    如果参数为 true,则返回一个等于 "true" 的字符串;否则,返回一个等于 "false" 的字符串。

    valueOf

    public static String valueOf(char c)
    返回 char 参数的字符串表示形式。

    参数:
    c - 一个 char
    返回:
    一个长度为 1 的字符串,它包含参数 c 的单个字符。

    valueOf

    public static String valueOf(int i)
    返回 int 参数的字符串表示形式。

    该表示形式恰好是单参数的 Integer.toString 方法返回的结果。

    参数:
    i - 一个 int
    返回:
    int 参数的字符串表示形式。
    另请参见:
    Integer.toString(int, int)

    valueOf

    public static String valueOf(long l)
    返回 long 参数的字符串表示形式。

    该表示形式恰好是单参数的 Long.toString 方法返回的结果。

    参数:
    l - 一个 long
    返回:
    long 参数的字符串表示形式。
    另请参见:
    Long.toString(long)

    valueOf

    public static String valueOf(float f)
    返回 float 参数的字符串表示形式。

    该表示形式恰好是单参数的 Float.toString 方法返回的结果。

    参数:
    f - 一个 float
    返回:
    float 参数的字符串表示形式。
    另请参见:
    Float.toString(float)

    valueOf

    public static String valueOf(double d)
    返回 double 参数的字符串表示形式。

    该表示形式恰好是单参数的 Double.toString 方法返回的结果。

    参数:
    d - 一个 double
    返回:
    double 参数的字符串表示形式。
    另请参见:
    Double.toString(double)

    intern

    public String intern()
    返回字符串对象的规范化表示形式。

    一个初始为空的字符串池,它由类 String 私有地维护。

    当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。

    它遵循以下规则:对于任意两个字符串 st,当且仅当 s.equals(t)true 时,s.intern() == t.intern() 才为 true

    所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。字符串字面值在 Java Language Specification 的 §3.10.5 定义。

    返回:
    一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。
    展开全文
  • string的构造函数的形式: string str:生成空字符串 string s(str):生成字符串为str的复制品 string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值 ...

    一. string的构造函数的形式:


    string str:生成空字符串
    
    string s(str):生成字符串为str的复制品
    
    string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值
    
    string s(cstr, char_len):以C_string类型cstr的前char_len个字符串作为字符串s的初值
    
    string s(num ,c):生成num个c字符的字符串
    
    string s(str, stridx):将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值
    
    eg:
    
    
        string str1;               //生成空字符串
        string str2("123456789");  //生成"1234456789"的复制品
        string str3("12345", 0, 3);//结果为"123"
        string str4("012345", 5);  //结果为"01234"
        string str5(5, '1');       //结果为"11111"
        string str6(str2, 2);      //结果为"3456789"
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    void test1()
    {
        string str1;               //生成空字符串
        string str2("123456789");  //生成"1234456789"的复制品
        string str3("12345", 0, 3);//结果为"123"
        string str4("0123456", 5);  //结果为"01234"
        string str5(5, '1');       //结果为"11111"
        string str6(str2, 2);      //结果为"3456789"
    
        cout<<"str2:"<<str2<<endl;
        cout<<"str3:"<<str3<<endl;
        cout<<"str4:"<<str4<<endl;
        cout<<"str5:"<<str5<<endl;
        cout<<"str6:"<<str6<<endl;
    }
    
    int main()
    {
        test1();
        return 0;
    }

    这里写图片描述

    二. string的大小和容量::

    
    1. size()和length():返回string对象的字符个数,他们执行效果相同。
    
    2. max_size():返回string对象最多包含的字符数,超出会抛出length_error异常
    
    3. capacity():重新分配内存之前,string对象能包含的最大字符数
    
    
    void test2()
    {
        string s("1234567");
        cout << "size=" << s.size() << endl;
        cout << "length=" << s.length() << endl;
        cout << "max_size=" << s.max_size() << endl;
        cout << "capacity=" << s.capacity() << endl;
    
    }

    这里写图片描述

    三. string的字符串比较::

    1. C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。  
    在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小,  
    比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)
    同时,string (“aaaa”) <string(aaaaa)。    
    
    2. 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。 
      他返回一个整数来表示比较结果,返回值意义如下:0:相等 1:大于 -1:小于 (A的ASCII码是65a的ASCII码是97)
    void test3()
    {
        // (A的ASCII码是65,a的ASCII码是97)
        // 前面减去后面的ASCII码,>0返回1,<0返回-1,相同返回0
        string A("aBcd");
        string B("Abcd");
        string C("123456");
        string D("123dfg");
    
        // "aBcd" 和 "Abcd"比较------ a > A
        cout << "A.compare(B):" << A.compare(B)<< endl;                          // 结果:1
    
        // "cd" 和 "Abcd"比较------- c > A
        cout << "A.compare(2, 3, B):" <<A.compare(2, 3, B)<< endl;                // 结果:1
    
        // "cd" 和 "cd"比较 
        cout << "A.compare(2, 3, B, 2, 3):" << A.compare(2, 3, B, 2, 3) << endl;  // 结果:0
    
    
        // 由结果看出来:0表示下标,3表示长度
        // "123" 和 "123"比较 
        cout << "C.compare(0, 3, D, 0, 3)" <<C.compare(0, 3, D, 0, 3) << endl;    // 结果:0
    
    }

    这里写图片描述

    四. string的插入:push_back() 和 insert()


    void  test4()
    {
        string s1;
    
        // 尾插一个字符
        s1.push_back('a');
        s1.push_back('b');
        s1.push_back('c');
        cout<<"s1:"<<s1<<endl; // s1:abc
    
        // insert(pos,char):在制定的位置pos前插入字符char
        s1.insert(s1.begin(),'1');
        cout<<"s1:"<<s1<<endl; // s1:1abc
    }

    这里写图片描述

    五、string拼接字符串:append() & + 操作符


    void test5()
    {
        // 方法一:append()
        string s1("abc");
        s1.append("def");
        cout<<"s1:"<<s1<<endl; // s1:abcdef
    
        // 方法二:+ 操作符
        string s2 = "abc";
        /*s2 += "def";*/
        string s3 = "def";
        s2 += s3.c_str();
        cout<<"s2:"<<s2<<endl; // s2:abcdef
    }

    这里写图片描述

    六、 string的遍历:借助迭代器 或者 下标法


    void test6()
    {
        string s1("abcdef"); // 调用一次构造函数
    
        // 方法一: 下标法
    
        for( int i = 0; i < s1.size() ; i++ )
        {
            cout<<s1[i];
        }
        cout<<endl;
    
        // 方法二:正向迭代器
    
        string::iterator iter = s1.begin();
        for( ; iter < s1.end() ; iter++)
        {
            cout<<*iter;
        }
        cout<<endl;
    
        // 方法三:反向迭代器
        string::reverse_iterator riter = s1.rbegin();
        for( ; riter < s1.rend() ; riter++)
        {
            cout<<*riter;
        }
        cout<<endl;
    }

    这里写图片描述

    七、 string的删除:erase()

    1. iterator erase(iterator p);//删除字符串中p所指的字符
    
    2. iterator erase(iterator first, iterator last);//删除字符串中迭代器
    
    区间[first,last)上所有字符
    
    3. string& erase(size_t pos = 0, size_t len = npos);//删除字符串中从索引
    
    位置pos开始的len个字符
    
    4. void clear();//删除字符串中所有字符
    void test6()
    {
        string s1 = "123456789";
    
    
        // s1.erase(s1.begin()+1);              // 结果:13456789
        // s1.erase(s1.begin()+1,s1.end()-2);   // 结果:189
        s1.erase(1,6);                       // 结果:189
        string::iterator iter = s1.begin();
        while( iter != s1.end() )
        {
            cout<<*iter;
            *iter++;
        }
        cout<<endl;
    
    }

    八、 string的字符替换:


    1. string& replace(size_t pos, size_t n, const char *s);//将当前字符串
    
    从pos索引开始的n个字符,替换成字符串s
    
    2. string& replace(size_t pos, size_t n, size_t n1, char c); //将当前字符串从pos索引开始的n个字符,替换成n1个字符c
    
    3. string& replace(iterator i1, iterator i2, const char* s);//将当前字符串[i1,i2)区间中的字符串替换为字符串s
    void test7()
    {
        string s1("hello,world!");
    
        cout<<s1.size()<<endl;                     // 结果:12
        s1.replace(s1.size()-1,1,1,'.');           // 结果:hello,world.
    
        // 这里的6表示下标  5表示长度
        s1.replace(6,5,"girl");                    // 结果:hello,girl.
        // s1.begin(),s1.begin()+5 是左闭右开区间
        s1.replace(s1.begin(),s1.begin()+5,"boy"); // 结果:boy,girl.
        cout<<s1<<endl;
    }

    九、 string的大小写转换:tolower()和toupper()函数 或者 STL中的transform算法


    方法一:使用C语言之前的方法,使用函数,进行转换

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string s = "ABCDEFG";
    
        for( int i = 0; i < s.size(); i++ )
        {
            s[i] = tolower(s[i]);
        }
    
        cout<<s<<endl;
        return 0;
    }

    方法二:通过STL的transform算法配合的toupper和tolower来实现该功能

    #include <iostream>
    #include <algorithm>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string s = "ABCDEFG";
        string result;
    
        transform(s.begin(),s.end(),s.begin(),::tolower);
        cout<<s<<endl;
        return 0;
    }

    相关的我的另外一篇博客:
    C++对string进行大小写转换
    https://blog.csdn.net/qq_37941471/article/details/81988702

    十、 string的查找:find


    1. size_t find (constchar* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找子串s,返回找到的位置索引,
    
        -1表示查找不到子串
    
    2. size_t find (charc, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找字符c,返回找到的位置索引,
    
        -1表示查找不到字符
    
    3. size_t rfind (constchar* s, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,反向查找子串s,返回找到的位置索引,
    
        -1表示查找不到子串
    
    4. size_t rfind (charc, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,反向查找字符c,返回找到的位置索引,-1表示查找不到字符
    
    5. size_tfind_first_of (const char* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    6. size_tfind_first_not_of (const char* s, size_t pos = 0) const;
    
      //在当前字符串的pos索引位置开始,查找第一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    7. size_t find_last_of(const char* s, size_t pos = npos) const;
    
      //在当前字符串的pos索引位置开始,查找最后一个位于子串s的字符,返回找到的位置索引,-1表示查找不到字符
    
    8. size_tfind_last_not_of (const char* s, size_t pos = npos) const;
    
     //在当前字符串的pos索引位置开始,查找最后一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到子串
    void test8()
    {
        string s("dog bird chicken bird cat");
    
        //字符串查找-----找到后返回首字母在字符串中的下标
    
        // 1. 查找一个字符串
        cout << s.find("chicken") << endl;        // 结果是:9
    
        // 2. 从下标为6开始找字符'i',返回找到的第一个i的下标
        cout << s.find('i',6) << endl;            // 结果是:11
    
        // 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标
        cout << s.rfind("chicken") << endl;       // 结果是:9
    
        // 4. 从字符串的末尾开始查找字符
        cout << s.rfind('i') << endl;             // 结果是:18-------因为是从末尾开始查找,所以返回第一次找到的字符
    
        // 5. 在该字符串中查找第一个属于字符串s的字符
        cout << s.find_first_of("13br98") << endl;  // 结果是:4---b
    
        // 6. 在该字符串中查找第一个不属于字符串s的字符------先匹配dog,然后bird匹配不到,所以打印4
        cout << s.find_first_not_of("hello dog 2006") << endl; // 结果是:4
        cout << s.find_first_not_of("dog bird 2006") << endl;  // 结果是:9
    
        // 7. 在该字符串最后中查找第一个属于字符串s的字符
        cout << s.find_last_of("13r98") << endl;               // 结果是:19
    
        // 8. 在该字符串最后中查找第一个不属于字符串s的字符------先匹配t--a---c,然后空格匹配不到,所以打印21
        cout << s.find_last_not_of("teac") << endl;            // 结果是:21
    
    }

    十一、 string的排序:sort(s.begin(),s.end())


    #include <iostream>
    #include <algorithm>
    #include <string>
    using namespace std;
    
    void test9()
    {
        string s = "cdefba";
        sort(s.begin(),s.end());
        cout<<"s:"<<s<<endl;     // 结果:abcdef
    }

    十二、 string的分割/截取字符串:strtok() & substr()


    strtok():分割字符串

    void test10()
    {
        char str[] = "I,am,a,student; hello world!";
    
        const char *split = ",; !";
        char *p2 = strtok(str,split);
        while( p2 != NULL )
        {
            cout<<p2<<endl;
            p2 = strtok(NULL,split);
        }
    }

    这里写图片描述

    void test11()
    {
        string s1("0123456789");
        string s2 = s1.substr(2,5); // 结果:23456-----参数5表示:截取的字符串的长度
        cout<<s2<<endl;
    }
    展开全文
  • String

    2018-06-14 12:29:22
    构造方法: * public String():空构造 * public String(byte[] bytes):把字节数组转成字符串 * public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串 * public String(char[] ...
  • 本文主要介绍C++中的string类的常见用法。 1. 概述 string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库...
  • 关于String类的知识经常出现在面试题中,在此先记录自己的理解。 首先明白一个事,java存在一个常量池,可以用来存储字符串常量。 1 创建的字符串变量在内存中的区别 两者看似都是创建了一个字符串对象,但在内存...
  • C++的string学习总结

    2018-11-13 08:44:49
    2.string类常用接口总结a.string类对象的常见构造函数b.string类对象常用的容量操作c.string类对象的访问操作d.string类对象常见的修改操作 一.标准库的string类 1.string类是什么? string是表示字符串的字符...
  • String用法详解

    2018-04-05 16:15:51
    string类声明string类本不是STL的容器,但是它与STL容器有着很多相似的操作,因此,把string放在这里一起进行介绍。 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心...
  • C++ string的用法和例子

    2018-03-25 20:10:35
    同时C++的算法库对string也有着很好的支持,而且string还和c语言的字符串之间有着良好的接口。虽然也有一些弊端,但是瑕不掩瑜。 其中使用的代码多数都是来自cpp官网,因为例子非常全。 声明和初始化方法: 想...
  • String...的用法

    2019-01-08 11:10:32
    一、前言 在项目中,在检查参数是否为空的工具类中,出现了一个函数的参数列表是这种写法,于是学习了一下这种用法的使用。个人觉得这种处理还是很不错的,使得代码更加简洁... 例如我们有一个方法叫做test(String…...
  • C++ string substr()

    2016-01-08 19:48:15
    共有成员函数 std::string::substr ...返回一个新建的初始化为string对象的子串的拷贝string对象。 子串是,在字符位置pos开始,跨越len个字符(或直到字符串的结尾,以先到者为准)对象的部分。 参数
  • //string 转 byte[] String str = "Hello"; byte[] srtbyte = str.getBytes(); // byte[] 转 string String res = new String(srtbyte); System.out.println(res); <br /> ...
  • 问题 ...地区 上海 为可变的string数据  年龄 21 为可变的int数据  性别 男 为可变的string数据  遇到这种情况你们是怎么样解决的呢?把这段字符串保存在常量类里吗?不!我们应该遵循Google的开发...
  • 一、Java String 类——String字符串常量 字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 需要注意的是,String的值是不可变的,这就导致每次对String的...
  • std::string用法总结

    2011-11-10 20:34:23
    在平常工作中经常用到了string类,本人记忆了不好用到了的时候经常要去查询。在网上摘抄一下总结一下,为以后的查询方便: string类的构造函数: string(const char *s); //用c字符串s初始化string(int n,char c)...
  • 1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们...
  • c++中string类的详解

    2012-08-07 15:25:10
    通过在网站上的资料搜集,得到了很多关于string类用法的文档,通过对这些资料的整理和加入一些自己的代码,就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了! 下面先罗列出string类的函数有哪一些,...
  •  java中的String类是按照unicode进行编码的,当使用String(byte[] bytes, String encoding)构造字符串时,encoding所指的是bytes中的数据是按照那种方式编码的,而不是最后产生的String是什么编码方式,换句话说,...
1 2 3 4 5 ... 20
收藏数 7,711,003
精华内容 3,084,401
关键字:

string