String类相关总结

来源:互联网 发布:mac air 11.6装双系统 编辑:程序博客网 时间:2024/05/21 14:48

主要内容:

1. Sting类和基本数据类型包装类
2. StringBuffer和StringBuilder

String类和基本数据类型包装类:

概述:
字符串和八大基本数据类型是操作最频繁的数据,在面向对象的编程思想中,将其操作的属性抽象封装起来是必不可少的。封装后,以对象形式存在,方便操作自己的属性方法,也便于各对象类型的相互转换。
String类:
描述字符串事物,提供了多个方法对字符串进行操作。
在java中,字符串是一个特殊的对象,一旦初始化就以常量形式存在内存池中,如果再有变量以其赋值,刚是直接将变量引用指向其在内存中的地址。
例如:同一程序中有代码 

s1 = "string";

s2 = "string";
Sytem.out.println(s1 == s2); //结果是true。
常用操作方法:
1、获取

1)字符串长度
int length();
2)获取某个位置上的某个字符。
char charAt(int index);
3)根据字符获取该字符在字符串中第一次出现的位置
int indexOf(int ch); //传的是字符的ASCII码
int indexOf(int ch, int fromIndex); //从fromIndex指定位置开始,获取字符在字符串中出现的位置
int indexOf(String str); //返回的是str的位置
int indexOf(String str, int fromIndex); //返回的是从fromIndex指定位置开始,str在字符串中的位置
int lastIndexOf(int ch); //反向开始查找
2、判断
1)字符串中是否包含某一个子串
boolean contains(CharSequence str);
特殊之处:indexOf(str);也可以判断指定字符串是否存在于字符串中。存在,指出位置,否则,返回-1
2)字符串中是否有内容
boolean ifEmpty(); // 原理就是判断长度是否为零
3)字符串是否以指定内容开头
boolean startWith(String str);
4)字符串是否以指定内容结尾
boolean endWith(String str);
5)判断字符串的内容是否相同
boolean equals(String str);
6)判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase(String anotherString);
3、转换
1)将字符数组转成字符串。
构造函数:
String(char[] arr);
String(char[] arr, int offset, int count);
静态方法:
static Sring copyValueOf(char[] data);
2)将字符串转成字符数组
char[] toCharArray();
3)将字节数组转成字符串
构造函数:
String(byte[] value);
String(byte[] value, int offset, int count);//(特别常用)
4)将字符串转成字节数组
byte[] getBytes();
特殊:字符串和字节数组中转换过程中,是可以指定编码表的。
5)将基本数据类型转换成字符串
static String valueOf(int num); // 特殊:3+""也可以将3转换成字符串。
static String valueOf(double d);
4. 替换
String replace(char oldChar, char newChar); //如果要替换的字符不存在,返回的是原来相同的字符串。
5、切割
String[] split(regex);
6、子串,获取字符串中的一部分
String subString(int beginIndex);
String subString(int beginIndex,int endIndex); //包含头,不包含尾
7、转换、去除空格、比较
1)将字符串转成大写或小写
String toUpperCase();
String toLowerCase();
2)将字符串两端多个空格去除\
String trim();
3)对两个字符串进行自然顺序的比较
int compareTo(String anotherString);

练习代码示例:

/*需求:用自己的方法实现trim()功能,去除两端的空格思路:1. 分别从头和从尾遍历,判断第一个不为空格的的位置。charAt();2. 获得得到位置中的子串返回。substring(start,end);*/class MyTrim{public static void main(String[] args){String srcString = "        Hello String           ";String trimString = myTrim(srcString);System.out.println(trimString);}public static String myTrim(String str){int start = 0, end = str.length()-1;while(start<=end && str.charAt(start) == ' ')start++;while(start<=end && str.charAt(end) == ' ')end--;//同于subString()是含头不含尾,所以获子串时尾部位置得+1;return str.substring(start,end+1);}}

/*需求:获取两个字符串中最大相同子串,  第一个动作:将短的那个串进行长度一次递减的子串打印。  "asfwqtghelloqoiuh"  "ghiwqhelloagweo"思路:1. 先判断传入的s1, s2字符串的长度,获得较小的字符串 min2. 想办法获得min字符串的所有子串,substring(由长到短)3. 每次将min的子串与较长字符串比较,若包含便返回该子串。*/class GetMaxSubString{public static void main(String[] args){String s1 = "asfwqtghelloqoiuh";String s2 = "ghiwqhelloagweo";String maxSubString = getMaxSubString(s1,s2);System.out.println(maxSubString);}public static String getMaxSubString(String s1,String s2){String max =null,min = null;//确定较长字符串和较短字符串min = (s1.length()>s2.length())? s2 : s1;max = min==s2 ? s1 : s2;//获得较短字符串的所有子串(从长到短)for(int i = 0; i<min.length(); i++){for(int j=0,k=min.length()-i; k!= min.length()+1 ; j++,k++){String temp = s2.substring(j,k);//若较长字符串中包含该子串,则返回。if(max.contains(temp))return temp;}}return null;}}

基本数据类型包类:

基本类型        类类型

byte                 Byte
short               Short
int                    Integer
long                Long
float                 Float
double           Double
boolean         Boolean
char                Character

基本数据类型对象包装类的最常见作用:就是用于基本数据类型和字符串类型之间转换

1. 基本数据类型转成字符串
1)基本数据类型+""
2)基本数据类型.toString(基本数据类型值)如:Integer.toString(23);
2. 字符串转成基本数据类型
static int parseInt(String s);
int i = Integer.parse("123");
Boolean b = Boolean.parse("true");
Character不用转,本身就是字符。
3. 十进制转成其他进制
toBinaryString();
toHexString();
toOctalString();
4. 其他进制转成十进制
int parseInt(string,radix);//将其他进制数都转成十进制数显示

基本数据类型包装类中JDK1.5版本的新特性:
自动装箱拆箱:
Integer i = 4; //自动将4装箱成对象
i = i+2; //又自动将4拆箱成基本数据类型
对于新特性,如果byte数值范围内的数已经存在,则不会再开辟新的空间
Integer a = 127;
Integer b = 127;
a == b; //结果ture

StringBUffer和StringBuilder:

StringBuffer:一个类似于String的字符串缓冲区,是一个容器,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。 

特点:
1、长度可变化
2、可以字节操作多个数据类型
3、最终会通过toString方法变成字符串

常用操作方法:
1、存储(添加)
StringBuffer append(everydata); //向容器中添加元素
StringBuffer insert(offset, everydata); //插入到指定位置
2、删除
StringBuffer delete(start,end); //删除start-end缓冲区间的数据,不包含end
StringBuffer deleteCharAt(index); //删除指定位置的数据。
3、修改
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch);
4、获取
int charAt(int index);    //获取指定位置字符
int indexOf(String str);    //从前向后找子串位置
int lastIndexOf(String str); //从后向前找子串位置
int length();
String substring(int start, int end); //获取子串
5、反转
StringBuffer reverse();    //将容器内的元素反转过来
6、将缓冲区的指定数据存储到指定字符数组中
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) ;

StringBuilder:用作 StringBuffer 的一个简易替换,在StringBuilder 上的主要操作是appendinsert 方法,可重载这些方法,以接受任意类型的数据。是JDK1.5后对StringBuffer效率上的优化。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。

区别:

StringBuffer 线程同步,在多线程中是安全的。
StringBuilder线程不同步,在多线程是不安全的。
因此多线程建议使用StringBuffer,单线程一般使用StringBuilder。

代码示例:

<pre name="code" class="java">/*需求:练习StringBuilder的常用方法操作*/class StringBuilderTest{public static void main(String[] args){//定义一个StringBuilderStringBuilder sb = new StringBuilder();//添加字符串sb.append("woyaoquheima!");sb.append("天天向上");//返回该容器的长度int cap = sb.capacity();int len = sb.length();//找到从左开始第一次的位置int pos = sb.indexOf("天");int pos1 = sb.lastIndexOf("上");//将"天天向上"替换成"越来越好"sb.replace(pos,pos1+1,"越来越好");//在pos的前面添加"itheima"sb.insert(pos,"itheima");//获取指定位置的字符char ch = sb.charAt(pos);//删除0-7之间的元素sb.delete(0,7);//将StringBuilder中的元素反转sb.reverse();//将StringBuilder中的元素打印出来String sbElement = sb.toString();System.out.println(sbElement);}}



0 0
原创粉丝点击