------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
String类
字符串是一个特殊的对象,一旦被初始化就不可以被改变
String s1="abc";
String s2=new String("abc");
String s3="abc";
System.out.println(s1==s2);//false
s1和s2有什么区别?
s1 是一个类类型变量,在内存中只有"abc"一个对象。
s2在内存中有两个对象,new一个,”abc”一个
System.out.println(s1==s3);//true
建立s1对象后,又建立一个s3,发现常量池中,已经有abc字符串,为了节约内存,直接把S3的引用指向和s1同一个对象;
System.out.println(s1.equals(s2));//true
String复写了Object类中的equals方法,该方法用于判断字符串是否相同
记住:String s=new String() 等效于String s =""; 不等效String s = null;
String常见的操作
1、获取
int length():获取长度。
char charAt(int index):获取index位置上的字符
int indexOf(int ch):返回的是ch在字符串中第一次出现的位置
int indexOf(int ch, int fromIndex) :从fromIndex指定位置开始,获取ch在字符串中出现的位置
int indexOf(String str):返回的是str在字符串中第一次出现的位置
int indexOf(String str, int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置
int lastIndexOf(int ch) :反向索引一个字符串出现的位置,从右往左数
2、判断
boolean contains(str):字符串中是否包含某一个子串
indexOf(str):可以索引str第一次出现位置,如果返回-1,表示该str不在字符串中存在。也可以用于判断是否包含指定子串
if(str.indexOf("aa")!=-1)该方法即可以判断,又可以获取出现的位置
boolean isEmpty(): 字符中是否有内容,原理就是判断长度是否为0
boolean startsWith(str);字符串是否是以指定内容开头
boolean endsWith(str);字符串是否是以指定内容结尾
boolean equals(str);判断字符串内容是否相同
boolean equalsIgnoreCase();判断内容是否相同,并忽略大小写
3、转换
String(char[]):将字符数组转成字符串(构造函数)
String(char[],offset,count):将字符数组中的一部分转成字符串(构造函数)
char[] toCharArray():将字符串转成字符数组
String(byte[])将字节数组转成字符串
String(byte[],offset,count):将字节数组中的一部分转成字符串
byte[] getBytes():将字符串转成字节数组
将基本数据类型转成字符串:
static String valueOf(int):
static String valueOf(double):
3+"";//String.valueOf(3);
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
4、替换
String replace(oldchar,newchar);如果要替换的字符不存在,返回的还是原串
5、切割
String[] split(regex);regex切割的依据
6、获取字符串中的一部分
String substring(begin);从指定位置到结尾
String substring(begin,end);包含头,不包含尾
7、转换,去除空格,比较。
String toUpperCase();将字符串转成大写
String toLowerCase();将字符串转成小写
String trim();将字符串两端的多个空格去除
int compareTo(string);对两个字符串进行自然顺序的比较
String常见操作练习
1、去除字符串两端空格。
思路:
1、判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。结尾处判断空格也是如此。
2、当开始和结尾都判断到不是空格时,就是要获取的字符串。
public staticString myTrim(String str) { intstart = 0,end = str.length()-1; while(start<=end&& str.charAt(start)==' ') start++; while(start<=end&& str.charAt(end)==' ') end--; returnstr.substring(start,end+1); }
2、将一个字符串进行反转,将字符串中指定部分进行反转,"abcdefg";abfedcg
思路:
1、学习过对数组的元素进行反转。
2、将字符串变成数组,对数组反转。
3、将反转后的数组变成字符串。
4、只要将反转的部分的开始和结束位置作为参数传递即可。
public static String reverseString(String s,int start,int end) { //字符串变数组。 char[] chs = s.toCharArray(); //反转数组。 reverse(chs,start,end); //将数组变成字符串。 return new String(chs); } private static void reverse(char[] arr,intx,int y) { for(int start=x,end=y-1; start
3、获取一个字符串在另一个字符串中出现的次数。 "abkkcdkkefkkskk
思路:
1、定义个计数器。
2、获取kk第一次出现的位置。
3、从第一次出现位置后剩余的字符串中继续获取kk出现的位置。每获取一次就计数一次。
4、当获取不到时,计数完成。
方法一
public static int getSubCount(Stringstr,String key) { int count = 0; int index = 0; while((index=str.indexOf(key))!=-1) { sop("str="+str); str =str.substring(index+key.length()); count++; } return count; }
方法二
public static int getSubCount_2(Stringstr,String key) { int count = 0; int index = 0; while((index=str.indexOf(key,index))!=-1) { sop("index="+index); index = index + key.length(); count++; } return count; }
4、获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。
"abcwerthelloyuiodef" "cvhellobnm"
思路:1、将短的那个子串按照长度递减的方式获取到。
2、将每获取到的子串去长串中判断是否包含,如果包含,已经找到。
public static String getMaxSubString(Strings1,String s2) { String max = "",min =""; max = (s1.length()>s2.length())?s1:s2; min = (max==s1)?s2: s1; for(int x=0; x
StringBuffer
StringBuffer是字符串缓冲区,是一个容器。
字符串的组成原理就是通过该类实现的
特点:
1、长度是可变化的。
2、可以存储不同的类型数据。
3、可以对字符串进行修改。
4、最终通过toString方法变成字符串。
StringBuffer常见操作
1、存储
StringBuffer append():将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(index,数据):可以将数据插入到指定index位置
2、删除
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt(index):删除指定位置的字符
3、获取
char charAt(int index):获取指定下标处的字符
int indexOf(String str):返回指定字符串在缓冲区出现的位置
int lastIndexOf(Stringstr):
int length():返回缓冲区长度
String substring(int start, int end):获取从start到end-1下标的字符串
4、修改
StringBuffer replace(start,end,stri);用指定字符串替代从start到end-1的字符串
void setCharAt(int index, char ch) ;用ch替代指定下标的字符
5、反转
StringBuffer reverse();将字符串反转
6、将缓冲区中指定数据存储到指定字符数组中
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将src中角标为begin到(end-1)的数据存放到数组dst中,从dst角标为begin开始存储
JDK1.5 版本之后出现了StringBuilder
StringBuffer和StringBuilder的区别
StringBuffer是线程同步。
StringBuilder是线程不同步。
以后开发,建议使用StringBuilder
JDK升级三个因素:
1、提高效率。
2、简化书写。
3、提高安全性。
基本数据类型
基本数据类型对应的对象包装类
byte Byte
short short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换
基本数据类型转成字符串
方法一、基本数据类型+" "
方法二、基本数据类型.toString(基本数据类型值);
如: Integer.toString(34);//将34整数变成"34";
字符串转成基本数据类型
xxx a =Xxx.parseXxx(String);
int a = Integer.parseInt("123");
double b =Double.parseDouble("12.23");
boolean b = Boolean.parseBoolean("true");
Integer i = new Integer("123");
int num = i.intValue();
十进制转成其他进制:
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制:
parseInt(string,radix);
Int a =Integer.ParseInt("3c",16)
自动装箱(JDK1.5新特性)
Integer x = 4;//自动装箱//new Integer(4)
等价于:Integer x = new Integer(4);
x = x+ 2;
x先进行自动拆箱 x.intValue(),变成了int类型,和2进行加法运算。再将和进行装箱赋给x。
特殊:
Integer m = 128;
Integer n = 128;
sop("m==n:"+(m==n));//false
Integer a = 127;
Integer b = 127;
sop("a==b:"+(a==b));//结果为true。因为a和b指向了同一个Integer对象。
因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会在开辟新的空间。
练习:
1、对字符串排序。"zxcvbasdfg"
思路:1、字符串变数组。
2、数组排序。
3、数组变字符串。
String str = "zxcvbasdfg";
char[] arr = str.toCharArray();
public static String sortString(String str) { char[] arr = stringToArray(str); sort(arr); return arrayToString(arr); } private static char[] stringToArray(Stringstr) { return str.toCharArray(); } private static void sort(char[] arr) { for(int x=0; xarr[y]) { swap(arr,x,y); } } } } private static void swap(char[] arr,intx,int y) { char temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } private static String arrayToString(char[]arr) { return new String(arr); }
2、需求:对字符串中的数值进行排序。生成一个数值从小到大新字符串。"-7 0 4 12 13 3099 100"
思路:1、将字符串切割。变成字符串数组。
2、将字符串数组转成int数组。
3、int数组排序。
4、将int数组变成字符串。
String str = "12 0 99 -7 30 4100 13";
str = numberStringSort(str);
System.out.println(str);
public static String numberStringSort(String str) { String[] arr = splitString(str); int[] nums = toIntArray(arr); Arrays.sort(nums); return intArraytoString(nums); } private static String[] splitString(Stringstr) { return str.split(" "); } private static int[] toIntArray(String[]arr) { int[] nums = new int[arr.length]; for(int x=0; x
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------