String类的使用细节

String类的特点:

字符串对象一旦被初始化就不会被改变,字符串存储在字符串常量池中(字符串缓冲区)。如果池中没有就创建,如果有就直接拿过来用。

代码验证如下:

String s = "abc";//在常量池中创建了一个字符串对象

String s1 = "abc";//true

//s与s1内容相同,地址相同

System.out.println(s==s1);//true

System.out.println(s==s1);//true

String s2 = new String("abc");//在堆内存中创建了两个对象,一个new对象一个字符串对象

//s与s2内同相同,地址不同

System.out.println(s==s2);//false

System.out.println(s==s2);//true  原因是String类中的equals复写了String类中的equals建立了String类属于自己的判断字符串对象是否相同的依据,其实就是比较字符串的内容。

String s = new String();//等效于String s= "" 都是空字符串,内容相同,但是不等效于String s = null;

按照面向对象的思想对字符串功能进行分类

            思考思路:如果我们想要使用某种方法或说是功能来达到自己的目的,那么就首先需要对这种方法进行查找,看这种方法是否已经给我们封装好了,例如:如果想要获取字符串的长度,那么返回值必然是int,确定了返回值再想要找到方法就会很简单了。那么再思考的就是我们是否要给这个方法进行参数的传递,获取长度其实就是对象直接调用方法就可以了,因此我们也可以确定,这个方法是不需要来进行参数传递的。经过以上方式的思考,我们很快就可以确定下来这个方法是哪个。如果这样的思考之后,还没有找到我们需要的方法,那么有可能就需要我们自己进行封装了。

 

以下为String类常用的一些方法,也是通过面向对象的思想来进行整理的。

如字符串"string"

1,获取

1.1获取字符串中字符的个数(长度)。

返回值int  方法名:length();

1.2根据位置获取字符。

返回值char   方法名: charAt(int index);

1.3根据字符获取在字符串中第一次出现的位置。

返回值int     方法名:indexOf(int ch);

返回值int     方法名:indexOf(int ch,int fromIndex);

返回值int     方法名:indexOf(String str);

返回值int     方法名:indexOf(String str,int fromIndex);

1.4根据字符串获取在字符串中第一次出现的位置。

返回值int     方法名:lastIndexOf(int ch);

返回值int     方法名:lastIndexOf(int ch,int fromIndex);

返回值int     方法名:lastIndexOf(String str);

返回值int     方法名:lastIndexOf(String str,int fromIndex);

1.5根据字符串获取字符串中的一部分字符串,即子串。

返回值String 方法名:subString(int beginIndex, int endIndex);

返回值String 方法名:subString(int beginIndex);

2,转换

2.1将字符串变成字符串数组(字符串的切割)

返回值String[] 方法名 split(String regex);//添加正则表达式的切割规则

2.2将字符串变成字符数组。

返回值char[]  方法名 toCharArray();

2.3将字符串变成字节数组

返回值byte[]  方法名getBytes();

2.4将字符串中字母转为大小写字母

返回值String  方法名toUpperCase();

返回值String  方法名toLowerCase();

2.5将字符串中的内容进行替换

返回值String  方法名replace(char oldChar,char newChar);//没有oldChar则不改变

返回值String  方法名replace(CharSequence target,CharSequence replacement);

也可以理解为

返回值String  方法名replace(String oldString,String newString);因为String类是Sequence的子类

2.6去除字符串中两端的空格

返回值String  方法名trim();

2.7将字符串进行连接

返回值String  方法名concat(String s);

2.8将基本数据类型转换为字符串类型

返回值String  方法名ValueOf(基本数据类型);

2.9将字符数组转化为字符串

可以使用构造方法String(char [] value);

返回值String  方法名copyValueOf(char[] data)

3,判断

3.1两个字符串内容是否相同

返回值boolean  方法名 equals(Object obj);

返回值boolean  方法名equalsIgnoreCase(String str); //忽略大小写比较字符串内容是否相同。

3.2字符串中是否包含指定字符串

返回值boolean  方法名contains(String str);

3.3字符串是否以指定字符串开头,是否以指定字符串结尾

返回值boolean  方法名startsWith(String str);

返回值boolean  方法名endsWith(String str);

4,比较

4.1比较两个字符串的大小

返回值int  方法名compareTo(String str);

时间: 2024-10-27 17:19:59

String类的使用细节的相关文章

String类的一些细节

先看一段代码: public static void main(String[] args) {        String a = "a"+"b"+1;        String b ="ab1";        System.out.println(a == b);    } 输出的结果是true. 1.==和equals的区别 (1).基本数据类型,也称原始数据类型.byte,short,char,int,long,float,doubl

关于String类和String[]数组的获取长度方法细节

一.在Java中,以下代码段有错误的是第(  )行 public static void main(String[] args) { String name = "小新";                       //第一行 String sex = new String("男");          //第二行 String age = 18+"";                       //第三行 int len = name.le

Java基础之String类的细节问题

本文转载自http://sarin.iteye.com/blog/603684/ 先来看一个例子,代码如下: Java代码   public class Test { public static void main(String[] args) { String str = "abc"; String str1 = "abc"; String str2 = new String("abc"); System.out.println(str == 

C++ string类

string类是C++的一个常见的面试题,考查面试者的基本功,虽然简单,但是有很多细节需要注意. #pragma once #include <assert.h> /* 深拷贝与浅拷贝:         浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝, 而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针.浅拷贝是指源对象 与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同).对其中任何一个对象的改动都会影响另外一个对象.     深

[转]C/C++关于string.h头文件和string类

学习C语言时,用字符串的函数例如stpcpy().strcat().strcmp()等,要包含头文件string.h 学习C++后,C++有字符串的标准类string,string类也有很多方法,用string类时要用到string.h头文件. 我现在看vc的书上也有CString类,这个要包含什么,怎么用? 我现在很迷惑,这两个 string.h有什么区别.是怎么回事 且看一: 这两个一个是标准C库的,定义了一些字符串的处理函数.一个是标准C++库的,定义了标准C++的std::string类

java中匿名类的注意细节

abstract class Outer{ int num; public Outer(int x){ num = x; } public abstract void show1(); public abstract void show2(); } public class PC{ public static void main(String[] args){ new Outer(55)//构造父类部分 //子类重写部分 { public void show1(){ System.out.pri

C++标准模板库Stand Template Library(STL)简介与STL string类

参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进行过学习和总结,但并没有一个宏观上的把握,现在通过上一篇和这一篇博文,将对C++模板以及基于C++模板的STL关联起来,形成一个总体的把握,对于掌握C++中模板(template)这一强有力的工具会十分有帮助.本文的主要内容有: (1) STL容器: (2) STL迭代器: (3) STL算法: (4) ST

Java学习笔记21(String类补充:正则表达式)

正如python的re模块,不过Java和Python的正则表达式有一些区别,这里做简单介绍,具体的细节可以参考网上其他的文章: 功能:可以用于检验一个字符串,比如验证用户名,验证密码格式,验证是否是邮箱,等等 示例: "[0-9]{6,12}"匹配规则:6到12位的数字,比如123456789就是true,12345就是false "1[3578][0-9]{9}"匹配规则:1开头,第二位是3578中的一个,后面九个任意数字,比如13345678912就是true

String类的深入理解(未完待续)

String不是基本数据类型,String和8种包装类型是不可变类.String和8种基本数据类型采用值传递. 0.不可变类的设计原则 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[];//数组是引用传递 /*