Java基础——String API
来源:互联网 发布:道教神仙体系 知乎 编辑:程序博客网 时间:2024/06/05 11:05
1、初识String类
package on.itcase.p1.string.demo;public class StringDemo { public static void main(String[] args) { /* * String 类的特点: * 字符串对象一旦被初始化就不会被改变 */ StringDemo2(); } private static void StringDemo2() { // TODO Auto-generated method stub String s="abc";//创建一个字符串对象在常量池中 String s1=new String("abc");//创建两个对象一个new一个字符串对象在堆内存中 System.out.println(s==s1);//false //因为s是在常量池中创建的一个对象,可以被共享,而s1是在堆中创建的两个对象,是属于"abc"是属于s1对象的,它们地址不同 System.out.println(s.equals(s1));//true,比较的是内容,String类中 //的equals复写Object中的equals建立了String类自己的判断字符串对象是否相同的依据,其实就是比较字符串内容 System.out.println("s="+s1); System.out.println("s1="+s1); } /** } * 演示字符串定义的第一种方式,并明确常量池的特点 * 池中没有就建立,池中有就直接用 */ private static void StringDemo1() { String s="abc";//"abc"存储在字符串常量池中,如果有就不创建,没有就不创建// s="abc"; String s1="abc"; System.out.println(s==s1);//true// System.out.println("s="+s); }}
2、String结构
package on.itcase.p1.string.demo;public class StringConstructorDemo { public static void main(String[] args) { stringConstructorDemo(); stringConstructorDemo2(); } private static void stringConstructorDemo2() { // TODO Auto-generated method stub char[] arr= {'a','b','c','d','e'}; String s=new String(arr,1,2);//将字符数组变成字符串,从角标1开始取2个 System.out.println("s="+s); } public static void stringConstructorDemo() { // TODO Auto-generated method stub String s=new String();//相当于String s="";不等效于String s=null; byte[] arr= {65,67,68}; String s1=new String(arr);//将字节数组变成字符串 System.out.println("s1="+s1); }}
3、String方法
package on.itcase.p1.string.demo;public class StringMethodDemo { public static void main(String[] args) { /* * 按照面向对象的思想对字符串进行功能分类 * "abcd" * * 1、获取: * 1.1获取字符串中字符的个数长度 * int length(); * 1.2根据位置获取字符 * char charAt(int index); * 1.3根据字符获取在字符串中的第一次出现的位置 * int indexOf(int ch) * int indexOf(int ch,int fromIndex);从指定位置进行ch的查找第一次出现的位置 * int indexOf(String str);获取子符串在字符串中第一出现的位置 * int indexOf(String str,int fromIndex);从指定位置进行某个字符串的查找第一次出现的位置 * * 根据字符获取在字符串中的第一次出现的位置,从后往前找 int lastIndexOf(int ch)// * int lastIndexOf(int ch,int fromIndex);从指定位置进行ch的查找第一次出现的位置 * int lastIndexOf(String str);获取子符串在字符串中第一出现的位置 * int lastIndexOf(String str,int fromIndex);从指定位置进行某个字符串的查找第一次出现的位置 * * 1.4获取字符串中的一部分字符串,也叫子串 * String substring(int beginIndex,int endIndex);//获取从beginIndex开始的位置到endIndex结束位置的子字符串,注意:是到endIndex-1的位置 * String substring(int beginIndex);//获取从beginIndex开始的位置到后面所有的字符的子符串 * * 2、转换 * 2.1将字符串变成字符串数组(字符串的切割) * String[] split(String regex);//regex表示切割规则,既可以是简单的规则也可以是正则表达式 * 2.2将字符串变成字符数组 * char[] toCharArray(); * 2.3将字符串变成字节数组 * byte[] getBytes(); * 2.4将字符串中的字母转成大小写 * String toUpperCase();大写 * String toLowerCase();小写 * 2.5将字符串中的内容进行替换 * String replace(char oldCh,char newCh); * String replace(String s1,String s2); * 2.6将字符串两端的空格去除 * String trim(); * 2.7将字符串进行连接 * String concat(string); * 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、比较 * * * */ stringMethoDemo_1(); stringMethoDemo_2(); stringMethoDemo_3(); stringMethoDemo_4(); } private static void stringMethoDemo_4() { // TODO Auto-generated method stub System.out.println("abc".compareTo("bcd"));//前面小于后面就是负数,一个一个比较,相同就比下一个,下一个有结果了就不再比较 } private static void stringMethoDemo_3() { // TODO Auto-generated method stub String s="abc"; System.out.println(s.equals("ABC".toLowerCase())); System.out.println(s.equalsIgnoreCase("ABC")); System.out.println(s.contains("bc")); String str="ArrayDemo.java"; System.out.println(str.startsWith("Array")); System.out.println(str.endsWith(".java")); } private static void stringMethoDemo_2() { // TODO Auto-generated method stub String s="张三,李四,王五,"; String[] arr=s.split(","); for (int i=0;i<arr.length;i++) { System.out.println(arr[i]); } char[] chs=s.toCharArray(); for (int i=0;i<chs.length;i++) { System.out.println(chs[i]); } s="ab你"; byte[] bytes=s.getBytes(); for(int i=0;i<bytes.length;i++) { System.out.println(bytes[i]); /*结果:打印的是字节码,UTF-8一个汉字是三个字节 * 97 98 -28 -67 -96 * */ } System.out.println("Abc".toUpperCase()); System.out.println("abc".concat("kk")); System.out.println("-"+" ab c ".trim()+"-");//去除字符串两端的空格,不去除中间的 } private static void stringMethoDemo_1() { // TODO Auto-generated method stub String s="abcdae"; System.out.println("length:"+s.length()); System.out.println("char:"+s.charAt(2)); System.out.println("index:"+s.indexOf("a"));//我们可以根据-1来判断该字符或者字符串是否存在,如果等于-1则表示不存在 System.out.println("lastIndex:"+s.lastIndexOf('a')); /*结果: * length:6 char:c index:0 lastIndex:4 * * */ System.out.println("substring:"+s.substring(2,4));//结果:substring:cd }}
package on.itcase.p1.string.demo;public class StringObjectDemo { public static void main(String[] args) {// String s1="abc";// String s2="abc"; //intern():对字符串池进行操作的 String s1=new String("abc"); String s2=s1.intern(); System.out.println(s1==s2);//结果为:false,池中没有"abc"对象,所以进行创建并赋给s2,并添加到池中 }}
4、String的4个应用例子
package on.itcase.p1.string.demo;/*1、给定一个字符串数组,按照字典顺序进行从小到大排序 * * 思路: * 1、对数组排序,可以用选择、冒泡都行 * 2、for嵌套和比较以及换位 * 3、 * * * */public class StringTest_1 { public static void main(String[] args) { String[] arr= {"nba","abc","cba","zz","qq","haha"}; printArray(arr); sortArray(arr); printArray(arr); } private static void sortArray(String[] arr) { // TODO Auto-generated method stub for(int i=0;i<arr.length;i++) { for(int j=i+1;j<arr.length;j++) { if(arr[i].compareTo(arr[j])>0)//字符串比較用compareTo方法 swap(arr,i,j); } } } private static void swap(String[] arr, int i, int j) { // TODO Auto-generated method stub String temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } private static void printArray(String[] arr) { // TODO Auto-generated method stub System.out.print("["); for (int i=0;i<arr.length;i++) { if(i!=arr.length-1) System.out.print(arr[i]+", "); else System.out.print(arr[i]+"]\n"); } }}
package on.itcase.p1.string.demo;/* * 2、一个字串在整串中出现的次数 * "nbaernbaynbauinbaopnba" * 思路: * 1、要找的字串是否存在,如果存在獲取其出現的位置,這個可以使用indexOf完成 * 2、如果找到了,那麼就記錄出現的位置并在剩余字符串中查找该字串,而剩余字符串 * 的起始位置是出现位置+字串的长度 * 3、以此类推,通过循环完成查找,如果找不到就是-1,并对每次找到用计数器记录 * * */public class StringTest_2 { public static void main(String[]args) { String str="nbaernbaynbauinbaopnba"; String key="nba"; int count=getKeyStringCount(str,key); int count1=getKeyStringCount2(str,key); System.out.println("Count="+count); System.out.println("Count1="+count1); } private static int getKeyStringCount2(String str, String key) { // TODO Auto-generated method stub int count=0; int index=0; while((index=str.indexOf(key,index))!=-1) { index=index+key.length(); count++; } return count; } /* * 获取字串在整串中出现的次数 * * * */ private static int getKeyStringCount(String str, String key) { // TODO Auto-generated method stub //1、定义计数器 int count=0; //2、定义变量key出现的位置 int index=0; while((index=str.indexOf(key))!=-1) { str=str.substring(index+key.length()); count++; } return count; }}
package on.itcase.p1.string.demo;/* * 3、两个字符串中最大相同的字串 * "qwerabcdtyadf" * "xcabcdvbn" * 思路: * 1、既然取得是最大字串,先看短的哪个字符串是否在长的哪个字符串中,如果存在,短的哪个字符串 * 就是最大字串 * 2、如果不是,那么就将短的那个子串长度按递减的方式减去子串,看长串中是否存在 * 如果存在就已找到,也就不同再找了 * */public class StringTest_3 { public static void main(String[] args) { String s1="qwerabcdtyadf"; String s2="xcabcdvbn"; String s=getMaxSubstring(s1,s2); System.out.println(s); } /* * 获取最大子串 * * */ private static String getMaxSubstring(String s1, String s2) { // TODO Auto-generated method stub String max=null,min=null; max=(s1.length()>s2.length())?s1:s2; min=max.equals(s1)?s2:s1; for(int i=0;i<min.length();i++) { for(int a=0,b=min.length()-i;b!=min.length()+1;a++,b++) { String sub=min.substring(a, b); // System.out.println("s="+s); if(max.contains(sub)) return sub; } } return null; }}
package on.itcase.p1.string.demo;/* * *4、模拟一个trim功能一致的方法,去除字符串两端的空白 * 思路: * 1、定义两个变量 * 一个变量作为从头开始判断字符串空格的角标 * 一个变量作为从尾开始判断字符串空格的角标 * 2、判断到不是空格位置,取头尾之间的字符串即可 * */public class StringTest_4 { public static void main(String[]args) { String s=" ab c "; s=Mytrim(s); System.out.println("-"+s+"-"); } public static String Mytrim(String s) { // TODO Auto-generated method stub int start=0; int end=s.length()-1; while(start<=end && s.charAt(start)==' ') { start++; } while(start<=end && s.charAt(end)==' ') { end--; } return s.substring(start, end+1); }}
5、StringBuffer和StringBuilder
* StringBuffer就是字符串缓冲区,用于存储数据的容器
* 特点:
* 1、长度是可变的
* 2、可以存储不同类型的数据
* 3、最终要转成字符串进行使用
* 4、可以对字符串进行修改
package on.itcase.p2.stringbuffer.demo;public class StringBufferDemo { public static void main(String[]args) { /* * StringBuffer就是字符串缓冲区,用于存储数据的容器 * 特点: * 1、长度是可变的 * 2、可以存储不同类型的数据 * 3、最终要转成字符串进行使用 * 4、可以对字符串进行修改 * * 既然是一个容器,具备以下功能: * 1、添加: * StringBuffer append(data); * StringBuffer append(index,data); * 2、删除 * StringBuffer delete(start,end);包含头不包含尾 * StringBuffer deleteCharAt(int,index);删除指定位置的元素 * 3、查找 * 和字符串的方法一样 * char charAt(index); * int indexOf(string); * int lastIndexOf(string); * 4、修改: * StringBuffer replace(start,end,string); //从start的位置到end的位置由string替换 * void setCharAt(index,char); * */ bufferMethodDemo(); bufferMethodDemo1(); bufferMethodDemo2(); } private static void bufferMethodDemo2() { // TODO Auto-generated method stub StringBuffer sb=new StringBuffer("abce"); sb.delete(1, 3);//结果:ae //清空缓冲区,即全删除// sb.delete(0, sb.length());// sb=new StringBuffer();//和上面一样的效果,清空缓冲区// sb.replace(1, 3, "nba");// sb.setCharAt(2, 'q'); /*结果 * sb: len:0 * * */ sb.setLength(0); System.out.println("sb:"+sb); System.out.println("len:"+sb.length()); } private static void bufferMethodDemo1() { // TODO Auto-generated method stub StringBuffer sb=new StringBuffer("abcd");// sb.append("xixi"); sb.insert(1, "qq"); System.out.println(sb.toString());//实现了对字符串进行修改 } public static void bufferMethodDemo() { //创建缓冲区对象 StringBuffer sb=new StringBuffer(); StringBuffer s1=sb.append(4); sb.append(true); sb.insert(1, "haha"); System.out.println(sb);//下面和这个打印的一样都是4,sb里面最终都将转换为字符串存储 System.out.println(s1);//s1和sb指向同一个地址 }}
StringBuilder的介绍
* jdk1.5以后出现了功能和StringBuffer一模一样的对象,就是StringBuilder
*
* 不同的是:
* StringBuffer是线程同步的
* StringBuilder是线程不同步的,即速度更快,因为没加锁
* 单线程用StringBuilder,多线程用StringBuffer
阅读全文
0 0
- JAVA基础——API(String)
- Java基础——String API
- Java基础--API String
- 黑马程序员———Java基础——Java API、String类
- Java基础-常用API之String类
- Java基础——String
- Java 基础——String
- Java基础—String类
- Java基础—String类
- Java API——String类
- 黑马程序员—Java API(String类)
- JavaSe基础XX16——API对象-String
- java基础总结18-java常用API(String类)
- API—String
- Java基础日记———String
- JAVA基础——String类
- Java基础——String、StringBuffer、StringBuilder
- 黑马程序员—— Java基础--String
- 【学习总结】Python基础知识笔记
- 容器技术炙手可热 数人云都有哪些应变之道?
- 做人不能太nice
- 图片cdn内部结构
- html div和span
- Java基础——String API
- 如何实现一个分布式RPC框架
- java程序员从笨鸟到菜鸟之(三十)集合之HashMap数据结构和扩容机制
- Openlayers 3加载XYZ示例
- HBase结合MapReduce批量导入
- 数据结构 栈、队列
- java中抽象类和接口的一般实现和特殊实现(匿名类)
- 永洪科技千人用户大会上 AI与Reporting产品正式发布
- 二叉树的几个基本算法