Java学习笔记五 常用API对象一
常用API:字符串操作:String类,StringBuffer类,StringBulider类
字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作。
1、String类:
 public class StringDemo {
     public static void main(String[] args)
     {
         StringDemo1();
     }
     protected static void StringDemo1()
     {
         /*java中有两种创建String对象的方法:
          * 1、使用字面量,就是直接用"字符串"即可:!!!是在字符串常量池中,如果没有则创建;如果有则直接使用
          * 2、使用new:和普通对象一样在对内存中创建,!!!是两个对象,先是参数字符串对象,然后是new的一个副本
          */
         String s="abc";
         String s1="abc";
         String s2=new String("abc");
         /*由上面的创建过程可知:字面量相同,则创建的对象相同,而字面量和new方法创建的对象地址不同
          * !!!但是String类中将equals进行重写,是比较字符串的内容而不是地址
          */
         System.out.println("s==s1是"+(s==s1));
         System.out.println("s==s2是"+(s==s2));
         System.out.println("s.equals(s2)是"+s.equals(s2));
         /*字符串字面量是常量,所以不允许改变值,
          * !!!下面的操作是重新赋值,同样会在字符串常量池中进行查找,如果没有则会重新创建并返回地址
          */
         s="def";
         System.out.println(s);
     }
 }
String类简介



 public class StringFunction1 {
     public static void main(String[] args)
     {
         StringConstructorDemo();
         StringFunctionGet();
         StringFunctionChance();
         StringFunctionJudge();
         StringFunctionCompare();
         StringFunctionOther();
     }
     private static void StringConstructorDemo()
     {
         /*对于String类中的构造函数,常用的是将byte[]和char[]转换为String对象,并可以截取一段
          * 对于byte[]数组是使用ascii码表进行转换
          */
         byte[] arr={65,66,67,95};
         String s=new String(arr);
         System.out.println("s="+s);
         char[] arr1={'a','s','d','f','g'};
         String s1=new String(arr1,1,3);
         System.out.println("s1="+s1);
     }
     public static void StringFunctionGet() {
         String s="asdfgasd";
         //获取长度
         int length=s.length();
         System.out.println("length="+length);
         //字符串和数组类似,可以看做是包含字符的数组,同样是从0角标开始
         //获取指定角标字符
         int num=4;
         char c=s.charAt(num);    //超出长度报StringIndexOutOfBoundsException
         System.out.println("第"+num+"位角标上的字符是"+c);
         //*获取指定字符(串)出现的角标,这是一系列方法,重要
         char c1='k';
         int i=s.indexOf(c1);    //如果没有改字符(串)则返回-1
         System.out.println("第一次出现"+c1+"的角标是"+i);
         //获取子串
         String substring=s.substring(2, 6);
         System.out.println("substring=\""+substring+"\"");
     }
     public static void StringFunctionChance()
     {
         //字符串的转换:就是将字符串格式转换为其他格式
         //用切割的方式将字符串转换为字符串数组,!!!使用正则表达式规则,特殊字符需要进行转义
         String s="张三.李四.王武";
         String[] arr=s.split("\\.");
         for (int i = 0; i < arr.length; i++)
         {
             System.out.println(arr[i]);
         }
         //转换为char[]
         char[] c=s.toCharArray();
         for (int i = 0; i < c.length; i++)
         {
             System.out.println(c[i]);
         }
         //转换为byte[],可以指定字符串的编码格式,然后获取其字节值
         s="aB中";
         byte[] b=s.getBytes();
         for (int i = 0; i < b.length; i++)
         {
             System.out.println(b[i]);
         }
         //转换为大/小写格式
         System.out.println(s.toUpperCase());
         System.out.println(s.toLowerCase());
         //转换指定位置的内容:如果找到则替换,没有则不换.返回替换后字符串
         System.out.println(s.replace("中", "中国"));
         //去除两端空格
         System.out.println("-"+"    ab c  ".trim()+"-");
         //字符串连接,将字符串的+操作封装
         System.out.println("abc".concat("kk"));
         System.out.println("abc"+"kk");
     }
     private static void StringFunctionJudge() {
         //String类的判断方法
         //判断两个字符串是否相等,使用equals(),重写了Object的该方法
         String s="abc";
         System.out.println(s+"==Abc是"+s.equals("Abc"));
         //判断两个字符串是否相等(忽略大小写)
         System.out.println("忽略大小写时,"+s+"==Abc是"+s.equalsIgnoreCase("Abc"));
                 //System.out.println(s.equals("Abc".toLowerCase()));
         s="ArrayDemo.java";
         //判断字符串中是否包含某子串
         System.out.println(s+"中包含\"demo\"是"+s.contains("Demo"));
                 //contains()其实就是将indexOf()方法返回-1的情况进行判断
         //判断字符串是否以某字串开始/结束
         System.out.println(s+"以\"Array\"开头是"+s.startsWith("Array"));
         System.out.println(s+"以\".java\"结尾是"+s.endsWith(".java"));
     }
     private static void StringFunctionCompare() {
         //比较方法
         //按字典顺序 (应该是Unicode码表)比较两个字串,即按字符进行比较,大则返回>0数,小则返回<0数,相等返回0
         System.out.println("你".compareTo("我"));
         System.out.println("abc".compareToIgnoreCase("Abc"));
     }
     private static void StringFunctionOther() {
         //这里是String类中的不常用方法
         //intern():检测字符串常量池中是否有该字符串存在,有则直接返回引用;没有则先创建在返回引用
         String s=new String("abc");                //栈中
         String s2=s.intern();                    //常量池中
         System.out.println("s==s2是"+(s==s2));    //false
     }
 }
String类常用方法示例
 public class StringTest {
     public static void main(String[] args){
         //1、字符串数组排序:和int[]排序相似,只是比较时使用的是方法而不是>或<
         String[] arr={"asd","wer","hehe","xfg","bcd","xgg"};
         StringArraySort(arr);
         printArray(arr);
         //2、检测子串在字符串中的出现次数:用indexOf()循环判断,注意该方法返回的是角标值
         String s="   aasnbafuhuus nbadiloveyouuelinbasod       ",sub="nba";
         int count=subStringCount(s,sub);
         System.out.println("count="+count);
         //3、寻找两字串中最大相同子串:就是判断大串中是否有小串,并将小串进行截取循环判断
         String s1="abweiloveyouefhur";
         String sameSubstring=sameSubstring(s,s1);
         System.out.println(s+"和"+s1+"的最大相同子串是:"+sameSubstring);
         //4、模拟trim()功能:获取第一个/最后一个非空格字符的角标进行截取
         System.out.println("-"+myTrim(s)+"-");
     }
     //1、
     public static void printArray(String[] arr){
         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]);
             }
         }
         System.out.println("]");
     }
     public static void StringArraySort(String[] arr) {
         for(int i=0;i<arr.length;i++){
             for(int j=0;j<arr.length-1;j++){
                 if(arr[j].compareTo(arr[j+1])<0){
                     swap(arr,j,j+1);
                 }
             }
         }
     }
     private static void swap(String[] arr,int a,int b){
         String temp=arr[a];
         arr[a]=arr[b];
         arr[b]=temp;
     }
     //2、
     private static int subStringCount(String s,String sub) {
         int num=0;
         int slength=s.length(),sublength=sub.length();
         if(slength<sublength){
             return num;
         }
         if(s.contains(sub)){
             /*
             for (int i = 0; i <= slength-sublength;) {
                 i=s.indexOf(sub,i);
                 if(i!=-1){
                     num+=1;
                     i+=sublength;
                 }else{
                     break;
                 }
             }
             */
             int index=0;
             while((index=s.indexOf(sub))!=-1){
                 num+=1;
                 s=s.substring(index+sublength);
             }
             return num;
         }else{
             return num;
         }
     }
     //3、
     public  static String sameSubstring(String s,String s1) {
         if(s.length()<s1.length()){
             swap(s,s1);
         }
         int s1length=s1.length();
         if(s.contains(s1)){
             return s1;
         }
         String substring="";
         for (int i = s1length; i>0; i--) {
             for (int j = 0; j < s1length-i+1; j++) {
                 substring=s1.substring(j, j+i);
                 if(s.contains(substring)){
                     return substring;
                 }
             }
         }
         return substring;
     }
     private static void swap(String a,String b){
         String Temp=a;
         a=b;
         b=Temp;
     }
     //4、
     public static String myTrim(String str) {
         int indexstart=0,indexend=str.length();
         while(str.charAt(indexstart)==' '){
             indexstart++;
         }
         if(indexstart!=indexend){
             while(str.charAt(indexend-1)==' '){
                 indexend--;
             }
         }
         return str.substring(indexstart,indexend);
     }
 }
String类方法的简单应用
2、StringBuffer类:
public class StringBufferClass {
    public static void main(String[] args){
        StringBufferDemo();
        StringBufferCURDFunction();
        StringBufferOtherFunction();
        //下面是StringBuilder(也就是StringBuffer类的示例),注意看区别
        int[] arr={3,6,2,6,8,1};
        System.out.println(StringBufferTest1(arr));
        System.out.println(StringBufferTest2(arr));
    }
    private static void StringBufferDemo() {
        /*StringBuffer是一个容器,和数组不同的是
         * 1、长度可变(初始长度为16字符):其实是在创建一(多)个16长度的数组,在将字串值复制过来,然后装入新内容
         * 2、可以存储不同类型值(注意不是所有类型:例如不包括byte)
         * 3、最终会转换为字符串类型
         * !!!4、和String不同的是,该类可以修改字符串值而不创建新空间
         */
        StringBuffer sb=new StringBuffer();
        //创建StringBuffer对象时也可以指定长度,效率较高
        StringBuffer s1=new StringBuffer(40);
        StringBuffer s=sb.append(4);
        /* !!!注意:有些操作返回本类对象,其实就是操作后  容器中  字符串的地址,所以两者是相等的
         * 并且该对象还可以继续进行操作,就是链式操作
         */
        System.out.println("s==sb是"+(s==sb));
        sb.append(true).append("haha");
        System.out.println(sb);
    }
    private static void StringBufferCURDFunction() {
        StringBuffer sb=new StringBuffer("i");
        //C:create,增
            //append()是向后追加
        StringBuffer s=sb.append("you");
            //insert()是在指定位置插入
        s.insert(1, "hate");
        System.out.println(s);
        //D:delete,删。注意没有清空的方法,可以用删除方法代替。
            //delete()删除指定位置,包含头,不含尾
        s.delete(5,8);
            //deleteCharAt()删除一个字符
        s.deleteCharAt(0);
        System.out.println(s);
        //R:read,查。和String的方法类似,indexOf(),charAt(),lastIndexOf()等
        //U:update:改
            //replace()替换一段字符,包含头,不含尾
        s.replace(1,4,"ove");
            //setCharAt()替换一个字符,!!!注意该方法返回void
        s.setCharAt(0, 'l');
        System.out.println(s);
    }
    private static void StringBufferOtherFunction() {
        StringBuffer s=new StringBuffer("test");
        //setLength():设置长度,长则补空字符,并修改长度属性;短则剪切,并修改长度属性。
        s.setLength(10);
        System.out.println(s);
        s.setLength(4);
        //reverse():反转字符串内容
        System.out.println(s.reverse());
    }
    /*下面两种方法看似类似,其实后者更好,
     * 因为使用+的字符串连接操作每次都会在字符串常量池中产生一个新字符串对象,浪费空间
     * 而后者是容器可修改
     */
    private static String StringBufferTest1(int[] arr) {
        String str="[";
        for (int i = 0; i < arr.length; i++) {
            if(i!=arr.length-1){
                str+=arr[i]+", ";
            }else{
                str+=arr[i]+"]";
            }
        }
        return str;
    }
    private static String StringBufferTest2(int[] arr) {
        StringBuilder sb=new StringBuilder("[");
        for (int i = 0; i < arr.length; i++) {
            if(i!=arr.length-1){
                sb.append(arr[i]+", ");
            }else{
                sb.append(arr[i]+"]");
            }
        }
        return sb.toString();
    }
}
StringBuffer类和StringBuilder类

3、StringBuilder类:

Java学习笔记五 常用API对象一的更多相关文章
- Java学习笔记七 常用API对象三
		一.泛型:简单说就是对对象类型进行限定的技术 public class GenericDemo { public static void main(String[] args){ /*泛型作为1.5版 ... 
- Java学习笔记六 常用API对象二
		1.基本数据类型对象包装类:见下图 public class Test { public static void main(String[] args){ Demo(); toStringDemo() ... 
- Java学习笔记之---类和对象
		Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ... 
- Activiti学习笔记5 — 常用API解析
		常用API解析: 一.ProcessEngineConfiguration 流程引擎配置对象(配置数据库连接4个大配置和建表策略) 二.ProcessEngine 流程引擎核心对象( ... 
- Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别
		1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ... 
- Java基础学习笔记(五) - 常用的API
		API介绍 概念:API 即应用编程程序接口.Java API是JDK中提供给我们使用的类说明文档,这些类将底层的代码实现封装.无需关心这些类是如何实现,只需要学习如何使用. 使用:通过API找到需要 ... 
- Java学习笔记五:Java中常用的运算符
		Java中常用的运算符 运算符是一种“功能”符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 score 的值设置为 20 ,这时候就需要一个“=”,告诉程序需要进行赋值操作. Java ... 
- Java基础学习笔记十三  常用API之正则表达式、Date、DateFormat、Calendar
		正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex).正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串.在 ... 
- Java学习笔记5(API)
		Java API API(Application Programming Interface)指的是应用程序编程接口. String类 String初始化有两种,一个是使用字符串常量初始化一个Stri ... 
随机推荐
- hdu 1024  最大m子段和
			注:摘的老师写的 最大m子段和问题 以-1 4 -2 3 -2 3为例最大子段和是:6最大2子段和是:4+(3-2+3)=8所以,最大子段和和最大m子段和不一样,不能用比如先求一个最大子段和,从序列中 ... 
- iOS数字媒体开发浅析
			概述 自然界中的所有看到的听到的都是模拟信号,模拟信号是随时间连续变化,然而手机电脑等信息都属于数字媒体,它们所呈现的内容就是把自然界中这些模拟信号转换成数字信号然后再传递给我们.数字信号不是连续的是 ... 
- 剑指Offer面试题27(Java版):二叉搜索树与双向链表
			题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建新的结点.仅仅能调整树中结点指针的指向. 比方例如以下图中的二叉搜索树.则输出转换之后的排序双向链表为: 在二叉树中,每一 ... 
- uva 473(dp)
			题意:按创作时间给出n首歌每首歌的时间ti,然后按创作时间装到m个光盘内,给出光盘最大分钟数t,问m个光盘最多总共放多少首歌. 题解:对于每首歌都能够选或者不选,假设选择了这首歌,是否把这首歌当做第j ... 
- ZOJ 2588 Burning Bridges(无向连通图求割边)
			题目地址:ZOJ 2588 由于数组开小了而TLE了..这题就是一个求无向连通图最小割边.仅仅要推断dfn[u]是否<low[v],由于low指的当前所能回到的祖先的最小标号,增加low[v]大 ... 
- Dubbo源代码分析(三):Dubbo之服务端(Service)
			如上图所看到的的Dubbo的暴露服务的过程,不难看出它也和消费者端非常像,也须要一个像reference的对象来维护service关联的全部对象及其属性.这里的reference就是provider. ... 
- 如何下载最新版的 Adobe Flash Player
			如何下载最新版的 Adobe Flash Player 中国访客用代理访问下面的链接,否则会自动跳转到 https://www.flash.cn/ 当我们从 https://get.adobe.com ... 
- django 笔记2
			默默坚持 :路由系统 URL :视图 request.GET request.POST request.FILES #checkbox等多选的内容 request.POST.getlist() #上传 ... 
- Git  操作笔记
			¥先放个地址:这个视频超详细 https://www.bilibili.com/video/av10475153 分了2部分: 1是GitHub的功能介绍:2是pc端+doc命令的操作+发布个人网站 ... 
- ZOJ 3435 Ideal Puzzle Bobble 莫比乌斯反演
			http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4119 依然是三维空间内求(1,1,1)~(a,b,c)能看到的整点数,平移一下 ... 
