Java: Java学习笔记之 String的常见用法

Posted JMW1407

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java: Java学习笔记之 String的常见用法相关的知识,希望对你有一定的参考价值。

String的常见用法

1、创建String

String str1="hello";
String str2=new String("world");

2、字符串比较

通过使用过String类提供的equals()方法,该方法本身是可以进行区分大小写的相等判断。除了这个方法之外,String类还提供有如下的比较操作:

public class TestDemo 
    public static void main(String[] args) 
        String str1 = "hello" ;
        String str2 = "Hello" ;
        System.out.println(str1.equalsIgnoreCase(str2));//不区分大小写
        System.out.println(str1.equals(str2));//区分大小写
    

在String类中compareTo()方法是一个非常重要的方法,该方法返回一个整型,该数据会根据大小关系返回三类内容:

相等:返回0.
小于:返回内容小于0.
大于:返回内容大于0

compareTo()是一个可以区分大小关系的方法,字符串的比较大小规则, 总结成三个字 “字典序” 相当于判定两个字符串在一本词典的前面还是后面. 先比较第一个字符的大小(根据 unicode 的值来判定), 如果不分胜负, 就依次比较后面的内容。

public class TestDemo 
    public static void main(String[] args) 
        System.out.println("A".compareTo("a")); 
        System.out.println("a".compareTo("A"));
        System.out.println("A".compareTo("A"));
        System.out.println("AB".compareTo("AC"));
        System.out.println("刘".compareTo("杨"));
    

3、字符串查找

//字符串查找。最好用最方便的就是contains()
public class TestDemo 
    public static void main(String[] args) 
        String str = "hello world" ;
        System.out.println(str.contains("world"));
        System.out.println(str.contains("abcd"));
    



//使用indexOf()需要注意的是,如果内容重复,它只能返回查找的第一个位置。
public class TestDemo 
    public static void main(String[] args) 
        String str = "hello world" ;
        System.out.println(str.indexOf("world")); // 6,w开始的索引
        System.out.println(str.indexOf("abcd")); // -1,没有查到
        if (str.indexOf("hello") != -1) 
            System.out.println("可以查到指定字符串!");
        
    


//判断开头或结尾
public class TestDemo 
    public static void main(String[] args) 
        String str = "**&&hello world!!" ;
        System.out.println(str.startsWith("**")); //判断是否以指定字符开头
        System.out.println(str.startsWith("&&",2)); //判断从指定位置开始是否以指定字符开头
        System.out.println(str.endsWith("!!")); //判断是否以指定字符结尾
    




4、字符串替换

public class TestDemo 
    public static void main(String[] args) 
        String str = "helloworld" ;
        System.out.println(str.replaceAll("l", "_"));//用_替换所有l
        System.out.println(str.replaceFirst("l", "_"));//用_替换首个l
    


注意事项: 由于字符串是不可变对象,替换不修改当前字符串, 而是产生一个新的字符串。

5、字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。

public class TestDemo 
    public static void main(String[] args) 
        String str = "no pains no gains " ;
        System.out.println("将全部字符串按照空格拆分");
        String[] result1 = str.split(" ") ; // 将全部字符串按照空格拆分
        for(String s: result1) 
            System.out.println(s);
        
        
        System.out.println("将部分字符串按照空格拆分");
        String[] result2 = str.split(" ",2) ;// 将部分字符串按照空格拆分
        for(String s: result2) 
            System.out.println(s);
        
    



拆分是特别常用的操作. 一定要重点掌握. 另外有些特殊字符作为分割符可能无法正确切分, 需要加上转义。

代码示例: 拆分IP地址

public class TestDemo 
    public static void main(String[] args) 
        String str = "192.168.1.1" ;
        String[] result = str.split("\\\\.") ; //用.来拆分字符串
        for(String s: result) 
            System.out.println(s);
        
    



注意事项:

  • 1、字符"|","*","+“都得加上转义字符,前面加上""
  • 2、而如果是"",那么就得写成"\\".
  • 3、如果一个字符串中有多个分隔符,可以用"|"作为连字符

代码示例: 多次拆分

public class TestDemo 
    public static void main(String[] args) 
        String str = "name=张三&age=18&grade=89" ;
        String[] result = str.split("&") ;
        for (String x:result) 
            System.out.print(x+" ");
        
        System.out.println();
        for (int i = 0; i < result.length; i++) 
            String[] temp = result[i].split("=") ;
            System.out.println(temp[0]+" = "+temp[1]);
        
    


6、字符串截取

public class TestDemo 
    public static void main(String[] args) 
        String str = "hello world" ;
        System.out.println(str.substring(6));//从指定位置到结束截取字串
        System.out.println(str.substring(0, 5));//截取部分内容
    



注意事项:

  • 索引从0开始
  • 注意前闭后开区间的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标

7、转换功能的方法

public char[] toCharArray () :将此字符串转换为新的字符数组。
String s = "HelloWorld!";
//char[] toCharArray:把字符串转换为字符数组
char[] chs = s.toCharArray();


public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
String s = "HelloWorld!";
byte[] bytes = s.getBytes();


public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使用replacement字符串替换。
String str = "itcast itheima";
String replace = str.replace("it","IT");

8、其他操作方法

public class TestDemo 
    public static void main(String[] args) 
        String str = " heLlo%$$%@#$%wORld 哈哈哈 " ;
        System.out.println(str.length());
        System.out.println(str.toUpperCase());
        System.out.println(str.toLowerCase());
    


public class TestDemo 
    public static void main(String[] args) 
        System.out.println("hello".isEmpty());
        System.out.println("".isEmpty());
        System.out.println(new String().isEmpty());
    


//代码示例: 将首字母大写
public class TestDemo 
    public static void main(String[] args) 
        System.out.println(fistUpper("apple"));
        System.out.println(fistUpper(""));
        System.out.println(fistUpper("a"));
    
    public static String fistUpper(String str) 
        if ("".equals(str)||str==null) 
            return str ;
        
        if (str.length()>1) 
            return str.substring(0, 1).toUpperCase()+str.substring(1) ;
        
        return str.toUpperCase() ;
    






9、StringBuffer 和 StringBuilder

频繁使用字符串拼接的时候可以用StringBuilder(推荐)或者StringBuffer。

数据的种类

9.1、StringBuilder的用法

性能

  • StringBuilder 对字符串的操作是直接改变字符串对象本身,而不是生成新的对象,所以开销小。
  • 与StringBuffer相比StringBuilder的性能略高(15%~30%),StringBuffer为保证多线程情况下的安全性(synchronize加锁)而牺牲了性能,以时间来换取安全。而StringBuilder则没有保证线程的安全,从而性能略高于StringBuffer。

注意

原始数组长度不够时,在传入新字符串时会增加数组长度,并将原来的数据传到新数组中,反复添加遇到这种情况时会对内存造成损耗,为了避免这种情况,可以在创建时提前给StringBuilder对象设置长度:StringBuilder builder = new StringBuilder(初始长度)

9.1.1、StringBuilder对象的创建

1.常规创建

StringBuilder builder = new StringBuilder();

2.在创建的时候添加初始字符串

StringBuilder builder = new StringBuilder("abc");

3.在创建的时候添加初始长度

StringBuilder builder = new StringBuilder(初始长度);

这里需要注意的是如果在StringBuilder的对象创建时没有指定长度,StringBuilder对象会自动生成一个16位的字符数组

9.1.2、常用方法

  • 1.builder.append()

作用:追加数据

builder.append("just");

在加入新字符串时,不会在内存中新开辟字符串空间,只是给原有的字符串尾部加入新字符串

  • 2.builder.insert()

作用:向指定位置插入数据

builder.insert(0, "you");

每次加入新字符串之后都会改变字符串中每个字符的地址,插入后原始指定位置的数据向后移

  • 3.builder.deleteCharAt()

作用:删除指定位置的数据

builder.deleteCharAt(index);
  • 4.builder.delete( )

作用:删除指定范围的数据左闭右开

builder.delete(beginIndex, endIndex);

范围:从开始位置到结束位置的前一个

  • 5.builder.toString()

作用:将对象中的数据以字符串的形式返回

builder.toString();
  • 6.builder.reverse()

作用:将对象中的数据反转

builder.reverse();

9.2、StringBuffer的用法

和StringBuilder方法使用类似

1、创建

StringBuffer str = new StringBuffer();//构造方法;
StringBuffer str1 = new StringBuffer("StringBufferDemo");

2、移除

str1.deleteCharAt(4);//移除指定位置的字符;deleteCharAt(int )
System.out.println(str1);//  第四个位置处为n,结果为StrigBufferDemo
tr1.delete(0,5);//BufferDemo;删除指定范围的字符串,delete(int star,int end);左关右开;

System.out.println(str1);// BufferDemo

3、添加对象

System.out.println(str1.append(109));//添加object对象到字符串末尾,BufferDemo109

System.out.println(str1.append("string"));//BufferDemo109string

System.out.println(str1.insert(5,"加"));//在指定位置添加object对象;Buffe加rDemo109string

4、替换

str1.setCharAt(8,'改');//修改指定位置字符

System.out.println(str1.replace(6,14,"替换"));//替换指定位置的字符串;Buffe加替换string

5、取反与返回缓冲区字符串对象

System.out.println(str1.reverse());//取反;gnirts换替加effuB.
String str2 = str1.toString();//返回缓冲区字符串对象

9.3、区别

参考

1、Java中String类的常用方法
2、Java基础语法 String 类常见操作
3、必须了解的Java中String用法
4、关于String类的必知必会
5、String、StringBuffer和StringBuilder的区别
6、StringBuilder的用法

以上是关于Java: Java学习笔记之 String的常见用法的主要内容,如果未能解决你的问题,请参考以下文章

Thinking in java学习笔记之String的不可变性

Java学习笔记之字符串

Java学习笔记之字符串

Java学习笔记4.1.1 字符串 - String类

Java学习笔记之:java的数据类型

Java学习笔记之:java数据类型的转换