摘要

本文将介绍String、StringBuilder类的常用方法。

在java中String类不可变的,创建一个String对象后不能更改它的值。所以如果需要对原字符串进行一些改动操作,就需要用StringBuilder类或者StringBuffer类,StringBuilderStringBuffer更快一些,缺点是StringBuilder不是线程安全的,但在算法竞赛中一般我们用不到多线程。所以,主要推荐使用StringBuilder类。


String:

方法概述

String 类包括的方法可用于检查序列的单个字符比较字符串搜索字符串提取子字符串创建字符串副本并将所有字符全部转换为大写或小写


String的遍历

String有两种遍历方式,第一种charAt()方法

第二种是先转化为字符数组,再挨个遍历

charAt(int i);//返回索引i处的字符

length();//返回此字符串的长度

isEmpty();//判空 当length()为0时返回true

String s = "123456";
for(int i = 0; i < s.length(); i++)
System.out.println(s.charAt(i)+" ");// 1 2 3 4 5 6

输出:

toCharArray();//返回此字符串的字符数组

String s = "123456";
char[] s1 = new char[10];
s1 = s.toCharArray();
for(int i = 0; i < s1.length; i++){
System.out.print(s1[i]+" ");// 1 2 3 4 5 6

输出:

String的比较

compareTo(String anotherString)//按字典顺序比较两个字符串

compareToIgnoreCase(String anotherString)//按字典顺序且不区分大小写比较两个字符串

equals(String anotherString)//判断两个字符串是否相等,相等返回true否则返回false

equalsIgnoreCase(String str)//同上,不区分大小写。

String s = "abcde";
String s1 = "Abcde"; int f = s.compareTo(s1);
int f1 = s1.compareToIgnoreCase(s);
Boolean f2 = s.equals(s1);
Boolean f3 = s.equalsIgnoreCase(s1); System.out.println(f);// 32
System.out.println(f1); // 0
System.out.println(f2); // false
System.out.println(f3); // true

输出:



compareTo()和compareToIgnoreCase()方法的返回值:

a.compareTo(b)

如果a > b 返回大于0的整数

如果a == b 返回0

如果a < b 返回小于0的整数

其实是返回a和b第一个不同字符的差值。


搜索子字符串

indexOf(int ch);// 返回指定字符在此字符串中第一次出现的索引

indexOf(int ch, int fromindex); // 同上, 从指定索引开始搜索

indexOf(String str);//返回子串在此字符串中第一次出现的索引

indexOf(String str, int fromindex);同上,从指定索引开始搜索

lastIndexOf(int ch);//返回指定字符在此字符串最后一次出现的索引

lastIndexOf(int ch, int fromindex);//同上, 从指定索引开始搜索

lastIndexOf(String str);//返回子串在此字符串最后一次出现的索引

lastIndexOf(String str, int fromindex);//同上, 从指定索引开始搜索

startsWith(String prefix);// 检查是否以某一前缀开始

(以上如果不存在,均返回 -1,如果要判断某个字符,应传入字符的Unicode编码)

String s = "12345346";
String s1 = "34";
int f = s.indexOf(s1); // 从索引0开始搜索
int f1 = s.indexOf(s1, 6); // 从索引6开始搜索
int f2 = s.lastIndexOf(s1);
Boolean f3 = s.statrsWith("12");
System.out.println(f); // 2
System.out.println(f1);// -1
System.out.println(f2);// 5
System.out.println(f3);// true

输出:

字符串拆分

split(String regex); // 根据正则表达式拆分

String s = "ABC DEF";
String s1[] = s.split(" ");//根据空格拆分
System.out.println(s1[0]);// ABC
System.out.println(s1[1]);// DEF

输出:

提取子字符串

substring(int beginIndex, int endIndex);//返回从begin开始到end-1结束的子串

String s = "123456";
String s1 = s.substring(0,3);// 123
System.out.println(s1);

输出:

子串的替换

replaceAll(String s1,String s2);//返回用s1替换所有s2后的字符串

replaceFirst(String s1,String s2);//返回用s1替换第一个s2后的字符串

String s = "11123456";
String s1 = s.replaceAll("1", "a");
String s2 = s.replaceFirst("1","a");
System.out.println(s1);///aaa23456
System.out.println(s2);///a1123456

输出:

转换大小写

toUpperCase(); //将此字符串中的所有字母都换为大写

toLowerCase()//将此字符串中的所有字母都换为小写

将其他类型的数据转化为字符串

valueOf(char[] data);//返回 char数组的字符串表示形式

valueOf(char[] data,int offset, int count)//返回 char 数组参数的特定子数组的字符串表示形式。

valueOf(int i);//返回 int 参数的字符串表示形式。

int a = 10;
String s = String.valueOf(a);
System.out.print(s); // 10

输出:

10

StringBulider

一个可变的字符序列。

构造方法

StringBuilder();//构建一个空的可变字符串。

StringBuilder(String str);//构建一个值为str的可变字符串。

StringBuilder s = new StringBuilder();
StringBuilder s1 = new StringBuilder("123456");//123456

遍历

charAt(int i);// 返回索引i位置的字符

length();//返回此字符串的长度

StringBuilder s = new StringBuilder("123");
for(int i = 0; i < s.length(); i++)
System.out.println(s.charAt(i)+" ");// 1 2 3

输出:

增加

append(String str);//在此字符串追加str。

append(StringBuilder str);//在此字符串追加str。

append(char[] str, int offset, int len);//将char的子数组追加到此字符串

StringBuilder s = new StringBuilder("123");
StringBuilder s1 = new StringBuilder("456");
s.append(s1);
System.out.print(s);// 123456

输出:

删除

delete(int start, int end);//移除此序列从start到end-1的字符串

deleteCharAt(int index);//移除指定索引上的char

StringBuilder s = new StringBuilder("123");
StringBuilder s1 = new StringBuilder("456");
s.delete(0, 1);
s1.deleteCharAt(1);
System.out.println(s);// 23
System.out.println(s1);// 46

输出:

修改

setCharAt(int index, char ch);//将指定索引处的字符替换为ch

查找

indexOf(String str);//返回子字符串第一次出现的索引

indexOf(String str, int fromIndex);//同上,从指定位置查找

lastIndexOf(String str);//返回子字符串最后一次出现的索引

lastIndexOf(String str, int fromIndex);//同上,从指定位置查找

字符串反转

reverse();//将此字符串反转

字符串截取

substring(int start);//返回此字符串从start开始至length-1结束的String

substring(int start, int end);//返回此字符串从start开始至end-1结束的String

toString();//返回此序列中的String表示形式。

(注意以上方法的返回值都是String而不是StringBuilder)

常用JAVA API :String 、StringBuilder、StringBuffer的常用方法和区别的更多相关文章

  1. java中String StringBuilder StringBuffer比较和效率(性能)测试

    string stringbuilder stringbuffer三者的区别 从JDK源码看,String.StringBuilder.StringBuffer都是存放在char[] 数组字符串. 简 ...

  2. java中string stringbuilder stringbuffer 的区别

    1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a&qu ...

  3. JAVA记录-String/StringBuilder/StringBuffer区别

  4. 7.算法竞赛中的常用JAVA API :String 、StringBuilder、StringBuffer常用方法和区别(转载)

    7.算法竞赛中的常用JAVA API :String .StringBuilder.StringBuffer常用方法和区别 摘要 本文将介绍String.StringBuilder类的常用方法. 在j ...

  5. Java学习——String,StringBuffer和StringBuilder

    Java学习——String,StringBuffer和StringBuilder 摘要:本文主要介绍了String字符串在内存中的存储情况,以及StringBuffer和StringBuilder的 ...

  6. java中String、StringBuffer、StringBuilder的区别

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  7. 常用类:String,StringBuffer,StringBuilder

    String String类被final修饰符修饰,所以不能将其进行继承,所有对它的改变都要重新创建一个新的地址 1.String的构造器 String() String(byte []bytes)/ ...

  8. Java基础知识(JAVA中String、StringBuffer、StringBuilder类的区别)

    java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...

  9. Java基础——java中String、StringBuffer、StringBuilder的区别

    (转自:http://www.cnblogs.com/xudong-bupt/p/3961159.html) java中String.StringBuffer.StringBuilder是编程中经常使 ...

  10. JDK源码分析系列---String,StringBuilder,StringBuffer

    JDK源码分析系列---String,StringBuilder,StringBuffer 1.String public final class String implements java.io. ...

随机推荐

  1. CodeForce-762B USB vs. PS/2(贪心)

    USB vs. PS/2 CodeForces - 762B 题意:有三种电脑,分别有a.b.c个,第一种只有USB接口,第二种只有PS/2接口,第三种有两种接口,有m个鼠标,告诉你价钱和接口类型,问 ...

  2. python 打字小游戏

    最近随便用python的pygame编了这个打字小游戏 只要有字母调到窗口底部就结束 上代码: import pygame.freetype import sys import random pyga ...

  3. PHP设计模式之门面模式

    门面模式,也叫外观模式.不管是门面还是外观,都是我们对外的媒介,就好像我们的脸面一样.所以,这个模式最大的特点就是要表现的"好看".怎么说呢?一堆复杂的对象调用,自己都看蒙了,特别 ...

  4. final关键字在PHP中的使用

    final关键字的使用非常简单,在PHP中的最主要作用是定义不可重写的方法.什么叫不可重写的方法呢?就是子类继承后也不能重新再定义这个同名的方法. class A { final function t ...

  5. Mixed Content: The page at 'xxx' was loaded over HTTPS, but requested an insecure resource 'xxx'.

    HTTPS页面里动态的引入HTTP资源,比如引入一个js文件,会被直接block掉的.在HTTPS页面里通过AJAX的方式请求HTTP资源,也会被直接block掉的. Mixed Content: T ...

  6. mac php安装扩展 如 seoole apcu

    //下载 --安装 --复制扩展文件到对应目录 wget https://pecl.php.net/get/apcu-5.1.7.tgz tar -zvcf pcu-5.1.7.tgz cd 到解压目 ...

  7. python线程threading

    线程示例: import threading import time # 唱歌任务 def sing(): # 扩展: 获取当前线程 # print("sing当前执行的线程为:" ...

  8. Microfacet模型采样下的brdf

    本文前言 在学习图形学(games101 from bilibili)的时候,也遇到了像这样的问题,Cook-Torrance模型无法实现粗糙度为0时,物体微表面呈现绝对镜面的效果(呈现出一面镜子), ...

  9. WPF进阶技巧和实战03-控件(2-特殊容器)

    ScrollViewer控件 直接继承ContextControl类,提供了虚拟界面,允许用户围绕更大的元素滚动.只能包含单个元素(ContextControl决定),但可以放置布局控件来实现多个任意 ...

  10. openssl 生成证书上 grpc 报 legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

    最近用传统的方式 生成的证书上用golang 1.15. 版本 报 grpc 上面 ➜ ~ go version go version go1.15.3 darwin/amd64 上面调用的时候报错了 ...