在java程序开发当中,有一些常用的对象被java封装成了对象,比如字符串。
字符串是一个特殊的对象。
字符串一旦初始化就不可以被改变。
示例代码如下:public class String1 { public static void main(String[] args){ String s1="abc";//s1是一个类类型变量,"abc"是一个对象 //字符串最大特点:一旦被初始化就不可以被改变。 String s2=new String("abc"); //s1和s2的区别在于:s1在内存中有一个对象,而s2在内存中有两个对象 System.out.println(s1==s2);//false System.out.println(s1.equals(s2));//true //String类复写了Object类的equals方法 //该方法判断两个字符串是否相同。 String s3="abc"; System.out.println(s1==s3);//true } }
为了方便展示,说明文字在代码之内。
一、获取
/* * String类的常见操作 * 1、获取 * 1.1 字符串中包含的字符数,也就是字符串的长度 * int length() * 1.2 根据位置获取该位置上的字符 * char charAt(int index) * 1.2 根据字符获取该字符在字符串中位置。 * int indexOf(int ch) * int indexOf(int ch,int fromIndex) * int indexOf(String str) * int indexOf(String str,int fromIndex) * int lastIndexOf(int ch) * int lastIndexOf(int ch,int fromIndex) * int lastIndexOf(String str) * int lastIndexOf(String str,int fromIndex) * * */ public class String2 { public static void main(String[] args){ method_1(); } public static void method_1(){ String str="abcdefabcdef"; //获取字符串的长度 sop(str.length());//12 //根据索引获取字符 sop(str.charAt(3));//d //根据字符获取索引 sop(str.indexOf('d'));//3 sop(str.indexOf('d',6));//9 sop(str.indexOf('m'));//-1 //反向索引一个字符串出现的位置 sop(str.lastIndexOf("b"));//7 } public static void sop(Object obj){ System.out.println(obj); } }
二、判断
/* * String类的常见操作 * 2、判断 * 2.1 字符串中是否包含某一个子串 * boolean contains(CharSequence s) * 2.2 字符串中是否有内容 * boolean isEmpty():原理就是判断长度是否为0 * 2.3 字符串是否以指定内容开头 * boolean startsWith(String prefix) * 2.3 字符串是否以指定内容结尾 * boolean endsWith(String siffix) * 2.4 判断字符串内容是否相同,复写了Object类中的equals方法 * boolean equals(String str) * 2.5 判断内容是否相同,并忽略大小写 * boolean equalsIgnoreCase(String str) * */ public class String3 { public static void main(String[] args){ method_1(); } public static void method_1(){ String str="StringDemo.java"; //判断文件名称中是否是以String单词开始 sop(str.startsWith("String"));//true //判断文件名称是否以.java结尾 sop(str.endsWith(".java"));//true //判断文件是否包含Demo sop(str.contains("Demo"));//true //判断两个字符串是否相同 sop(str.equals("String.java"));//false //判断两个字符串是否相同,并忽略大小写。 sop(str.equals("stringdemo.java"));//true } public static void sop(Object obj){ System.out.println(obj); } }
三、转换
/* * String类的常用操作 * 3、转换 * 3.1 将字符数组转成字符串。 * 构造函数:String(char[]) * 构造函数:String(char[] ,offset,count) * 静态方法:static String copyValueOf(char[] data); * static String copyValueOf(char[] data,int offset,int count) * static String valueOf(char[]) * static String valueOf(char[] data,int offset,int count) * 3.2 将字符串转成字符数组。 * char[] toCharArray() * 3.3 将字节数组转成字符串 * 构造方法:String(byte[] bytes) * String(byte[] byges,int offset,int length) * …… * 3.4 将字符串专程字节数组 * byte[] getBytes() *3.5 将基本数据类型转换成字符串 * static String valueOf(int i) * static String valueOf(double d) * …… * */ public class String4 { public static void main(String[] args){ method_1(); } public static void method_1(){ char[] arr={'a','b','c','d','e','f','g','h'}; //将字符数组转换成字符串 String s=new String(arr,1,3);//bcd sop("s="+s); String str="hellojava"; //将字符串转换成字符数组 char[] chs=str.toCharArray(); for(char ch:chs){ sop(ch); } } public static void sop(Object obj){ System.out.println(obj); } }
四、切割,替换,子串
/* * String类的常见操作 * 4、替换 * String replace(char oldchar,char newchar) * String replaceAll(String regex,String replacement) * String replaceFirst(String regex,String replacement) * 5、切割 * String[] split(regex) * 6、子串 * String substring(int beginIndex) * String substring(int beginIndex,int endIndex) * */ public class String5 { public static void main(String[] args){ method_1(); method_2(); method_3(); } public static void method_1(){ String str="abcb"; String st=str.replace('b','o'); sop(str);//abcd //从这个输出也可看出字符串的一个特点,一旦创建就不可改变。 sop(st);//aobo } public static void method_2(){ String str="zhangsan,lisi,wangwu"; String[] arr=str.split(","); for(int i=0;i
五、转换,去除空格,比较
/* * String类的常见操作 * 7、转换,去除空格,比较 * 7.1 将字符串专程大写或小写 * String toUpperCase() * String toLowerCase() * 7.2 将字符串两端的多个空格去除 * String trim() * 7.3 对两个字符串进行自然顺序的比较。 * int compareTo(String str); * */ public class String6 { public static void main(String[] args){ method_1(); method_2(); } public static void method_1(){ String str="Hello Java"; //将字符串转换成大写格式 sop(str.toUpperCase());//HELLO JAVA //将字符串转换成小写格式 sop(str.toLowerCase());//hello java } public static void method_2(){ String str=" ab cd "; sop(str.trim());//ab cd } public static void sop(Object obj){ System.out.println(obj); } }
一、实现去除字符串两端空格的功能,也就是trim方法的功能
/* * 需求:自定义一个去除字符串前后端空格的方法。 * * 思路: * 1、判断字符串第一个位置是否是空格,如果是,继续向下判断,直到不是空格为止,结尾处也是如此。 * 2、当开始和结尾都判断到不是空格时,就是要获取的字符串。 * */ public class String7 { public static void main(String[] args){ String str=" abcd "; String st=myTrim(str); sop(st);//abcd } /* * 去除字符串前后端的空格 * @param str 接收一个字符串 * @return 返回值类型为String * */ 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--; return str.substring(start,end+1); } public static void sop(Object obj){ System.out.println(obj); } }
二、将字符串翻转,将字符串的部分进行反转
/* * 需求:①将一个字符串进行翻转 * ②将字符串中指定部分进行反转 * 思路: * 1、将字符串变成数组,对数组反转 * 2、将反转后的数组变成字符串。 * 3、只要将需要反转的部分的开始和结束为止作为参数传递即可。 * */ public class String8 { public static void main(String[] args){ String str="123456"; String st=reverseString(str); System.out.println(st); } //反转字符串的重载形式。 public static String reverseString(String s){ return reverseString(s,0,s.length()); } public static String reverseString(String s,int start,int end){ //字符串变成数组 char[] chs=s.toCharArray(); //反转数组 reverse(chs,start,end); //将数组变成字符串 return new String(chs); } public static void reverse(char[] arr,int start,int end){ for(int i=start,j=end-1;i
三、获取一个字符串在另一个字符串中出现的次数
/* * 需求:获取一个字符串在另一个字符串中出现的次数 * “abkkcdkkefkkskk” * 思路: * 1、定义一个计数器 * 2、获取kk第一次出现的位置 * 3、从第一次出现位置后剩余的字符串中积蓄获取key出现的位置 * 每获取一次就计数一次。 * 4、当获取不到时,计数完成。 * */ public class String9 { public static void main(String[] args){ String str="abkkcdkkefkkskk"; System.out.println(method_1(str,"kk"));//4 } /* * 获取子串出现的次数 * @param str,key 接受两个字符串 * @return 返回一个int型值。 * */ public static int method_1(String str,String key){ int count=0; int index=0; while((index=str.indexOf(key,index))!=-1){ index=index+key.length(); count++; } return count; } }
四、获取两个子串的最大相同子串
/* * 需求:获取两个字符串最大相同子串。 * 思路: * 1、将短的字符串按照长度递减的方式获取到。 * 2、将每次获取到的子串到长串中判断是否包含,如果包含返回。 * */ public class String10 { public static void main(String[] args){ String s1="abcwerthelloyuiodef"; String s2="cvhellobonm"; String str=method_1(s1,s2); System.out.println(str);//hello } public static String method_1(String s1,String s2){ String max="",min=""; max=(s1.length()>s2.length())?s1:s2; min=(max==s1)?s2:s1; for(int i=0;i
概述
StringBuffer是字符串缓冲区,是一个容器
特点
① 长度可变
② 可操作多种数据类型
③ 最终会通过toString方法变成字符串。
StringBuffer的方法
增添
1、将基本数据类型添加到已有数据结尾处
StringBuffer append()
2、在指定位置插入数据
StringBuffer insert(index,数据)示例代码如下:
class StringBufferDemo{ public static void main(String[] args){ StringBuffer sb=new StringBuffer(); sb.append(true).append(92625).append("adjflakjild"); sop(sb); sb.insert(5,"ppppp").insert(10,"zz"); sop(sb); } public static void sop(Object obj){ System.out.println(obj); } }
删除
1.删除缓冲区中的数据,包含头不包含尾
StringBuffer delete(int start,int end)
2.删除指定位置上的字符
StringBuffer deleteCharAt(int index)示例代码如下:
class StringBufferDemo{ public static void main(String[] args){ StringBuffer sb=new StringBuffer("0123456789"); sb.delete(5,9); sop(sb); sb.deleteCharAt(1); sop(sb); } public static void sop(Object obj){ System.out.println(obj); } }
获取
1、获取指定位置上的字符
char charAt(int index)
2、根据字符串获取位置
int indexOf(String str)
int indexOf(String str,int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str,int fromIndex)修改
1、替换字符串
StringBuffer replace(int start,int end,String str)
2、替换指定位置上的字符
void setCharAt(int index,char ch)示例代码如下:
class StringBufferDemo{ public static void main(String[] args){ StringBuilder sb=new StringBuilder(); sb.append("abcdefg"); sb.replace(1,3,"zzzzzzz"); sop(sb); sb.setCharAt(0,'o'); sop(sb); } public static void sop(Object obj){ System.out.println(obj); } }
获取数组
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)
示例代码如下:
class StringBufferDemo{ public static void main(String[] args){ StringBuilder sb=new StringBuilder(); sb.append("abcdefghijkl"); char chs[]=new char[5]; sb.getChars(0,4,chs,0);//如果sreEnd大于数组chs的长度,会报ArrayIndexOutOfBoundsException异常 for(int i=0;i
JDK 1.5之后出现StringBuilder
StringBuffer是 线程同步的,由于加锁,效率较低。
StringBuilder是 线程不同步的,适用单线程,用于多线程不安全。
单线程情况下,建议使用StringBuilder可以提高效率,若果需要同步的话可以自己加锁。
1、提高效率。
2、简化书写。
3、提高安全性。
基本数据类型与其对应的包装类如下:
byte————Byte
short————Short
long————Long
int—————Integer
boolean——Boolean
float————Float
double———Double
char————Character
PS:有一点需要格外注意,String类并不是基本数据类型,也不是包装类。
基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型做转换。
下面以Integer类作为例子,进行学习。
① 基本数据类型转换成字符串
toString()
② 字符串转换成基本数据类型
static int parseInt(String s)
static int parseInt(String s,int radix):按照指定进制,将字符串转换成int基本数据类型
③进制转换
十进制转成其他进制
static String toBinaryString(int i)
static String toOctalString(int i)
static String toHexString(int i)
其他进制转成十进制
static int parseInt(String s,int radix)示例代码如下:
class StringDemo{ public static void main(String[] args){ sop(Integer.toBinaryString(60));//十进制转换成二进制 //111100 sop(Integer.toHexString(60));//十进制转换成16进制 //3c sop(Integer.toOctalString(60));//十进制转换成8进制 //74 sop(Integer.parseInt("110",2));//二进制转换成十进制 //6 sop(Integer.parseInt("110",8));//八进制转换成十进制 //72 sop(Integer.parseInt("110",16));//十六进制转换成十进制 //272 } public static void sop(Object obj){ System.out.println(obj); } }
---------------------- ASP.Net+Android+IO开发S 、 .Net培训 、期待与您交流! ----------------------