Java中关于字符串的操作

1.String类

在Java语言中将字符串作为对象来管理,因此可以像创建其他类对象一样来创建字符串对象

String 被修饰为final,所以是不能被继承的

immutable 是指不可改变的
比如创建了一个字符串对象
String garen =“盖伦”;
不可改变的具体含义是指:
不能增加长度
不能减少长度
不能插入字符
不能删除字符
不能修改字符
一旦创建好这个字符串,里面的内容 永远 不能改变

String 的表现就像是一个常量

1.1 创建字符串

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        //1. String(char a[])
        char []a={'a','b','c','d','e','f','g','h'};
        String s1=new String(a);//等价于String s=new String("abcdefgh");

        //2. String(char a[],int offset,int length)
        //offset:表示开始截取字符串的位置
        //length:表示截取字符串的长度
        String s2=new String(a,2,4);

        //3.
        String s3,s4;
        s3="fdsfsafsdfsaf";
        s4="fdsafinf;dsiant";
        System.out.println(s2);
    }
}

1.2 获取字符串信息

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {

        char []a={'a','b','c','d','e','f','a','g','h'};
        String s=new String(a);
        //1.获取字符串长度
        int len=s.length();


        //2.字符串查找
        //indexOf():返回的是搜索的字符或者字符串首次出现的位置
        //lastIndeof():方法返回的是搜索字符或者字符串最有一次出现的位置
        int id1=s.indexOf("a");
        int id2=s.lastIndexOf("a");


        //3.获取指定索引位置的字符
        //charAt()
        char ch=s.charAt(4);
    }
}

1.3 字符串操作

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {

        char []a={' ','a','b','c',' ','d','e','f','a','g','h'};
        String s=new String(a);
        //1.获取子字符串
        //substring(int beginIndex):从beginIndex指定某一索引处开始截取字符串
        String t=s.substring(5);

        //substring(int beginIndex,int endIndex):
        //返回的是某一索引位置开始截取到某一索引位置结束的字串
        String tt=s.substring(2,4);




        //2.去除空格
        //trim()方法返回字符串的副本,忽略前导空格和尾部空格
        //只是前导和后导
        String ttt=s.trim();


        //3.字符串替换
        //replace()方法可以实现将指定的字符或字符串替换成新的字符或者字符串
        //replace(char oldChar,char newChar)
        //多次出现会全部替换
        String tttt=s.replace("a","A");

        //4.判断字符串的开始和结尾
        //startsWith()  endsWith() 分别用于判断字符串是否以指定的内容开始或结束,返回都是boolean类型
        boolean flag1=s.startsWith("a");
        boolean flag2=s.endsWith("h");


        //5.判断字符串是否相等
        //对字符串对象进行比较不能简单地使用比较运算符"==",因为比较运算符比较的是两个字符串的地址是否相等,即使俩个
        //字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回false
        //5.1 equals()方法
        String str=new String("abcde");
        boolean flag3=s.equals(str);//如果俩个字符串具有相同的字符和长度,则会返回true
        //5.2 s.equalsIgnoreCase(str);是忽略大小写的比较是否相同

        //6. 按字典顺序比较两个字符串
        //compareTo() >返回正整数  =返回0  <返回负整数
        int ha=s.compareTo(str);


        //7. 字母大小写转换
        //数字或非字符不受影响
        String t1=s.toLowerCase();
        String t2=s.toUpperCase();

        //8. 字符串分割
        //使用split()方法可以使字符串按指定的分割字符或字符串对内存进行分割,并将分割后的结果
        //存在放在字符串数组中,
        //该方法可根据给定的分割符对字符串进行拆分
        //split(String signt)
        //该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数
        //split(String signt,int limit)
        String ss="192.168.0.1";
        //按照"."进行两次分割,使用转义字符"\\"
        String []array=ss.split("\\.");
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }

        System.out.println(flag3);
    }
}

1.4 格式化字符串

String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。

String.format()字符串常规类型格式化的两种重载方式

format(String format, Object… args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。

format(Locale locale, String format, Object… args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。

转换符详细说明示例
%s字符串类型“你好啊伙计”
%c字符类型‘m’
%b布尔类型true
%d整数类型(十进制) 88
%x整数类型(十六进制) FF
%o整数类型(八进制) 77
%f浮点类型8.888
%a十六进制浮点类型FF.35AE
%e指数类型9.38e+5
%g通用浮点类型(f和e类型中较短的)不举例(基本用不到)
%h散列码不举例(基本用不到)
%%百分比类型%(%特殊字符%%才能显示%)
%n换行符不举例(基本用不到)
%tx日期与时间类型(x代表不同的日期与时间转换符)不举例(基本用不到)
//演示
    String str=null;  
    str=String.format("Hi,%s", "小明");  
    System.out.println(str);  //Hi,小明
    str=String.format("Hi,%s %s %s", "小明","是个","大帅哥");            
    System.out.println(str); //Hi,小明 是个 大帅哥               
    System.out.printf("字母c的大写是:%c %n", 'C');  //字母c的大写是:C   
    System.out.printf("布尔结果是:%b %n", "小明".equal("帅哥"));  //布尔的结果是:false
    System.out.printf("100的一半是:%d %n", 100/2);  //100的一半是:50
    System.out.printf("100的16进制数是:%x %n", 100);  // 100的16进制数是:64
    System.out.printf("100的8进制数是:%o %n", 100);  //100的8进制数是:144
    System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);  //50元的书打8.5折扣是:42.500000 元  
    System.out.printf("上面价格的16进制数是:%a %n", 50*0.85);  //上面价格的16进制数是:0x1.54p5   
    System.out.printf("上面价格的指数表示:%e %n", 50*0.85);  //上面价格的指数表示:4.250000e+01   
    System.out.printf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*0.85);  //上面价格的指数和浮点数结果的长度较短的是:42.5000   
    System.out.printf("上面的折扣是%d%% %n", 85);  //上面的折扣是85%   
    System.out.printf("字母A的散列码是:%h %n", 'A');//字母A的散列码是:41 

搭配转换符

标志说明示例结果
+为正数或者负数添加符号(“%+d”,15)+15
0数字前面补0(加密常用)(“%04d”, 99)0099
空格在整数之前添加指定数量的空格(“% 4d”, 99)99
,以“,”对数字分组(常用显示金额)(“%,f”, 9999.99)9,999.990000
(使用括号包含负数(“%(f”, -99.99)(99.990000)
#如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0(“%#x”, 99)(“%#o”, 99)0x63 0143
<格式化前一个转换符所描述的参数(“%f和%< 3.2f”, 99.45)99.450000和99.45
d,%2$s”, 99,”abc”)99,abc

日期的格式化输出

标志说明示例
c包括全部日期和时间信息星期六 十月 27 14:21:20 CST 2007
F“年-月-日”格式2007-10-27
D“月/日/年”格式10/27/07
r“HH:MM:SS PM”格式(12时制)02:25:51 下午
T“HH:MM:SS”格式(24时制)14:28:16
R“HH:MM”格式(24时制)14:28
Date date=new Date();                                  
    //c的使用  
    System.out.printf("全部日期和时间信息:%tc%n",date);//全部日期和时间信息:星期三 九月 21 22:43:36 CST 2016        
    //f的使用  
    System.out.printf("年-月-日格式:%tF%n",date);//年-月-日格式:2016-09-21  
    //d的使用  
    System.out.printf("月/日/年格式:%tD%n",date);//月/日/年格式:16/10/21   
    //r的使用  
    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);//HH:MM:SS PM格式(12时制):10:43:36 下午  
    //t的使用  
    System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  //HH:MM:SS格式(24时制):22:43:36  
    //R的使用  
    System.out.printf("HH:MM格式(24时制):%tR",date); //HH:MM格式(24时制):22:43

1.4.1 格式化输出

如果不使用格式化输出,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐
使用格式化输出,就可以简洁明了

%s 表示字符串
%d 表示数字
%n 表示换行

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        String name ="盖伦";
        int kill = 8;
        String title="超神";

        //直接使用+进行字符串连接,编码感觉会比较繁琐,并且维护性差,易读性差
        String sentence = name+ " 在进行了连续 " + kill + " 次击杀后,获得了 " + title +" 的称号";

        System.out.println(sentence);

        //使用格式化输出
        //%s表示字符串,%d表示数字,%n表示换行
        String sentenceFormat ="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
        System.out.printf(sentenceFormat,name,kill,title);
    }
}

1.4.2 printf和format

printf和format能够达到一模一样的效果,[如何通过eclipse查看java源码可以看到,在printf中直接调用了format

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        String name ="盖伦";
        int kill = 8;
        String title="超神";

        String sentenceFormat ="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
        //使用printf格式化输出
        System.out.printf(sentenceFormat,name,kill,title);
        //使用format格式化输出
        System.out.format(sentenceFormat,name,kill,title);
    }
}

1.4.3 总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达

%n 和 \n 在java里在输出是一样的

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        int year = 2020;
        //总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达

        //直接打印数字
        System.out.format("%d\n",year);
        //总长度是8,默认右对齐
        System.out.printf("%8d\n",year);
        //总长度是8,左对齐
        System.out.format("%-8d%n",year);
        //总长度是8,不够补0
        System.out.format("%08d%n",year);
        //千位分隔符
        System.out.format("%,8d%n",year*10000);

        //小数点位数
        System.out.format("%.2f%n",Math.PI);

        //不同国家的千位分隔符
        System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000);
        System.out.format(Locale.US,"%,.2f%n",Math.PI*10000);
        System.out.format(Locale.UK,"%,.2f%n",Math.PI*10000);
    }
}

2.数字与字符串

2.1 数字转字符串

方法1: 使用String类的静态方法valueOf
方法2: 先把基本类型装箱为对象,然后调用对象的toString

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        int i=5;
        //方法1
        String s=String.valueOf(i);
        //方法2
        Integer it=i;
        String str=it.toString();
        System.out.println(it);

    }
}

2.2 字符串转数字

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        String str="999";
        String s="1.11";
        int i=Integer.parseInt(str);
        double j=Double.parseDouble(s);
        System.out.println(s);
        
        
        float f = 3.14f;
        //浮点数转字符串
        String s = String.valueOf(f);
        //字符串转浮点数
        f= Float.parseFloat(s);
         
        //如果字符串内容不是合法的数字表达,那么转换就会报错(抛出异常)
        Float.parseFloat("3.1a4");
    }
}

2.3 数学方法

package digit;
 
public class TestNumber {
 
    public static void main(String[] args) {
    	float f1 = 5.4f;
    	float f2 = 5.5f;
    	//5.4四舍五入即5
    	System.out.println(Math.round(f1));
    	//5.5四舍五入即6
    	System.out.println(Math.round(f2));
    	
    	//得到一个0-1之间的随机浮点数(取不到1)
    	System.out.println(Math.random());
    	
    	//得到一个0-10之间的随机整数 (取不到10)
    	System.out.println((int)( Math.random()*10));
    	//开方
    	System.out.println(Math.sqrt(9));
    	//次方(2的4次方)
    	System.out.println(Math.pow(2,4));
    	
    	//π
    	System.out.println(Math.PI);
    	
    	//自然常数
    	System.out.println(Math.E);
    }
}

3.字符

3.1 char对应的封装类

char对应的封装类是Character

public static void main(String[] args) {
        char c1 = 'a';
        Character c = c1; //自动装箱
        c1 = c;//自动拆箱
         
    }

3.2 Character常见的方法

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        System.out.println(Character.isLetter('a'));//判断是否为字母
        System.out.println(Character.isDigit('a')); //判断是否为数字
        System.out.println(Character.isWhitespace(' ')); //是否是空白
        System.out.println(Character.isUpperCase('a')); //是否是大写
        System.out.println(Character.isLowerCase('a')); //是否是小写

        System.out.println(Character.toUpperCase('a')); //转换为大写
        System.out.println(Character.toLowerCase('A')); //转换为小写

        //String a = 'a'; //不能够直接把一个字符转换成字符串
        String a2 = Character.toString('a'); //转换为字符串
    }
}

4.StringBuffer

StringBuffer是可变长的字符串

4.1 追加 删除 插入 反转

append追加
delete 删除
insert 插入
reverse 反转

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        String str1 = "let there ";

        StringBuffer sb = new StringBuffer(str1); //根据str1创建一个StringBuffer对象
        sb.append("be light"); //在最后追加

        System.out.println(sb);

        sb.delete(4, 10);//删除4-10之间的字符

        System.out.println(sb);

        sb.insert(4, "there ");//在4这个位置插入 there

        System.out.println(sb);

        sb.reverse(); //反转

        System.out.println(sb);
    }
}

4.2 长度 容量

为什么StringBuffer可以变长?
和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。 但是,这个字符数组,留有冗余长度
比如说new StringBuffer(“the”),其内部的字符数组的长度,是19,而不是3,这样调用插入和追加,在现成的数组的基础上就可以完成了。
如果追加的长度超过了19,就会分配一个新的数组,长度比原来多一些,把原来的数据复制到新的数组中,看上去 数组长度就变长了
length: “the”的长度 3
capacity: 分配的总空间 19

注: 19这个数量,不同的JDK数量是不一样的

package com.company;

import java.util.*;

public class Main{
    public static void main(String[] args) {
        String str1 = "the";

        StringBuffer sb = new StringBuffer(str1);

        System.out.println(sb.length()); //内容长度

        System.out.println(sb.capacity());//总空间
    }
}

5. IStringBuffer接口

package character;
  
public interface IStringBuffer {
    public void append(String str); //追加字符串
    public void append(char c);  //追加字符
    public void insert(int pos,char b); //指定位置插入字符
    public void insert(int pos,String b); //指定位置插入字符串
    public void delete(int start); //从开始位置删除剩下的
    public void delete(int start,int end); //从开始位置删除结束位置-1
    public void reverse(); //反转
    public int length(); //返回长度
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值