黑马程序员 java学习笔记——String类(包含StringBuffer和StringBuilder)

来源:互联网 发布:工业软件具体是什么 编辑:程序博客网 时间:2024/05/16 12:07

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

String类的概述

在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);//falseSystem.out.println(s1.equals(s2));//true//String类复写了Object类的equals方法//该方法判断两个字符串是否相同。String s3="abc";System.out.println(s1==s3);//true}}

String类的常见功能

为了方便展示,说明文字在代码之内。

一、获取

/* * 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'));//3sop(str.indexOf('d',6));//9sop(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//判断文件是否包含Demosop(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);//bcdsop("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<arr.length;i++){sop(arr[i]);}}public static void method_3(){String str="abcdef";//获取子串,包含头不包含尾String st=str.substring(0,3);sop(st);//abc}public static void sop(Object obj){System.out.println(obj);}}

五、转换,去除空格,比较

/* * 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);}}

String类的练习

一、实现去除字符串两端空格的功能,也就是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<j;i++,j--){swap(arr,i,j);}}public static void swap(char[] arr,int start,int end){char temp=arr[start];arr[start]=arr[end];arr[end]=temp;}}

三、获取一个字符串在另一个字符串中出现的次数
/* * 需求:获取一个字符串在另一个字符串中出现的次数 * “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<min.length();i++){for(int j=0,k=min.length()-i;k!=min.length();j++,k++){String temp=min.substring(j,k);if(max.contains(temp))return temp;}}return null;}}

StringBuffer类

概述

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<chs.length;i++){sop("chs["+i+"]="+chs[i]+";");}}public static void sop(Object obj){System.out.println(obj);}}

StringBuilder类

JDK1.5之后出现StringBuilder
StringBuffer是线程同步的,由于加锁,效率较低。
StringBuilder是线程不同步的,适用单线程,用于多线程不安全。
单线程情况下,建议使用StringBuilder可以提高效率,若果需要同步的话可以自己加锁。

java升级三要素

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));//十进制转换成二进制//111100sop(Integer.toHexString(60));//十进制转换成16进制//3csop(Integer.toOctalString(60));//十进制转换成8进制//74sop(Integer.parseInt("110",2));//二进制转换成十进制//6sop(Integer.parseInt("110",8));//八进制转换成十进制//72sop(Integer.parseInt("110",16));//十六进制转换成十进制//272}public static void sop(Object obj){System.out.println(obj);}}

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击