zoukankan      html  css  js  c++  java
  • Java 字符串

     字符串
        在java中语言中,将字符串作为对象来处理,可以通过java.lang包中的String类来创建字符串对象。以对象的方式来处理字符串,将使字符串更加灵活、方便,可以节省程序编写与维护时间。
    6.1 String类
    6.1.1声明字符串
    在Java中,字符串必须包含在一对(””)中。
    语法:String str;
    String:指定该变量为字符串类型
    str:任意有效的标识符,表示该字符串变量的名称。
    6.1.2创建字符串
    1、String(char a[])用一个字符数组a来创建String对象
    char a[]={‘g’,‘o’,‘o’,‘d’};
    String s=new String(a);
    等价于String s=new String(“good”);
    2.String(char a[],int offset,int length)
    提取字符数组a的一部分来创建一个字符串对象
    char a[]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’}
    String s=new String (2,4);
    等价于String s =new String(“uden”);
    3、String(char []value)
    该构造方法可以分配一个新的String对象,使其表示字符串数组参数中所有元素连接的结果。
    char a[]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’};
    String s =new String(a);
    等价于String s=new String(“student”);
    4、除了通过以上几种使用String类的构造方法来创建字符串变量外,还可以通过字符串常量引用赋给一个字符串变量。
    String str1,str2;
    str1=“We are student”;
    str2=“We are student”;

    此时str1与str2有相同的字符串常量,因此具有相同的实体。

    6.2连接字符串
    字符串连接时字符串操作中比较简单的一种,可以是多个字符串连接,也可以是字符串与其他数据类型进行连接。
    6.2.1连接多个字符串
    使用“+”号运算符可以实现连接多个字符串的功能,“+”运算符可以连接多个运算符并产生一个String对象。
    6.2.2连接其他数据类型
    字符串也可同其他的基本数据类型进行连接,如果将字符串同这些数据类型的数据进行连接,会将这些数据转换为字符串。
    【例】创建类link,在主方法中创建数值型变量,实现将字符串与整形、浮点型变量相连的结果输出。
    public class text_06 {
    public static void main(String[] args) {
    int booktime=4;//声明一个int型变量booktime
    float practice=2.5f;//声明一个float型变量practice
    //将相连的结果输出
    System.out.println("我每天花费"+booktime+"小时看书,"+practice+"小时上机练习!");
    System.out.println("我每天花费"+booktime+"小时看书,"+(booktime+practice)+"小时上机练                 习!");
    }

    }

    6.3获取字符串信息
    6.3.1获取字符串长度
    使用String类的length()方法,可以获取声明的字符串对象的长度。语法:
    str.length();
    【例】获取字符串长度
    String str=”we are family”;
    int z=str.length();
    6.3.2字符串查找
    String类提供了两种查找字符串的方法,即indexOf()和lastIndexOf()方法。这两中方法都允许在字符串中搜索指定条件的字符或字符串。IndexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是字符或字符串最后一次出现的位置。
    1、indexOf()方法
    语法:str.indexOf(substr);
    str:任意字符串对象
    substr:要查找的字符串
    【例】 String str=”we are student”
    int size=str.indexOf(a);//变量size的值是3
    在计算机中,String对象是用数组表示的。字符串的下标0~length()-1。
    2.lastIndexOf(String str)
    语法:str.lastIndexOf(substr)
    str:任意字符串对象
    substr:要搜索的字符串
    【例】在主方法中创建String对象,使用lastIndexOf()方法查看字符串str
    中空字符串的位置,然后输出字符串的长度,看是否相同。
    public class text_07 {
    public static void main(String[] args) {
    String str="we are student";
    int size=str.lastIndexOf("");//将空字符串在str中的索引位置赋值给变量size
    //将空字符串在str中的索引的位置赋值给变量size
    System.out.println("空字符串在str中索引的位置是:"+size);
    //将str的长度输出
    System.out.println("字符串的长度是:"+str.length());
    }
    }
    6.3.3获取指定索引位置的字符
    使用charAt()方法可以将指定索引的字符返回
    语法:str.charAt(int index);
    str:任意字符串
    index:整型值,用于指定要返回的字符的下标
    【例】在主方法中,创建String对象,使用charAt()方法查看字符串str中索引是6的字符。
    public class text_08 {
    public static void main(String[] args) {
    String str ="hello world";//定义字符串str
    char mychar=str.charAt(6);//将字符串str中索引的位置是6的字符返回
    System.out.println("字符串str中索引位置是6的字符为:"+mychar);//输出信息
    }

    }

    6.4字符串操作
    6.4.1获取子字符串
    通过String类的substring()方法可以对字符串进行截取。这些方法的共同点就是利用字符串的下标进行截取,且应明确字符串下标是从0开始的。Substring()方法被两种不同的方法来重载,来满足不同的需求
    1、substring(int beginIndex)该方法返回的是从指定的索引位置开始截取到该字符串结尾的子串。语法:str.substring(int beginIndex)
    其中,beginIndex指定从某一处开始截取字符串。
    【例】String str=“Hello World”;
          String s= str.substring(3);//获取子字符串,s的值是lo World
    2、substring(int beginIndex,int endIndex)
    beginInde:开始截取的子字符串的索引位置
    endIndex:子字符串在整个字符串中的结束位置
    【例】创建String对象,实现使用substring()方对字符串进行截取,并将截取后形成的新的字符串输出。
    public class text_10 {
    public static void main(String[] args) {
    String str="hello world";
    String substr=str.substring(0,3);//截取字符串
    System.out.println(substr);//输出截取后的字符串
    }
    }
    6.4.2去除空格
    trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法:str.trim(),
    其中str为任意的字符串对象
    public class text_09 {
    public static void main(String[] args) {
    String str=" java class ";//定义字符串
            System.out.println("字符串原来的长度是:"+str.length());
            //将str去掉前导和尾部的空格的结果输出
            System.out.println("去掉空格后的长度是:"+str.trim().length());
    }
    }
    6.4.3字符串替换
    replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。语法如下:
    str.replace(char oldChar,char newChar)
    oldChar:要替换的字符或字符串
    newChar:用于替换原来字符串的内容
    replace()方法返回的结果是一个新的字符串,如果字符串oldChar没有出现在该对象表达式的字符串序列中,则将原字符串返回。
    6.4.4判断字符串的开始和结尾
    startsWith()方法和endsWith()方法分别用于判断字符串是否以指定的内容开始或结束,这两个方法返回的值都是boolean型。
    1、startWith()方法
    该方法用于判断当前字符串对象的前缀是否为参数指定的字符串
    语法:str.startWith(String prefix),其中,prefix是指作为前缀的字符。
    2、endsWith()方法
    该方法用于判断当前字符串是否是以给定的子字符串结束
    语法:str.endsWith(String suffix),其中suffix是指作为后缀的字符串
    【例】创建类,在主方法中创建String型变量,并判断变量的前导和后置字符串。
    public class text_14 {
    public static void main(String args[]) { // 主方法
    String num1 = "22045612"; // 定义字符串num1
    String num2 = "21304578"; // 定义字符串num2
    boolean b = num1.startsWith("22"); // 判断字符串num1是否以'22'开头
    boolean b2 = num1.endsWith("78"); // 判断字符串num1是否以'78'结束
    boolean b3 = num2.startsWith("22"); // 判断字符串num2是否以'22'开头
    boolean b4 = num2.endsWith("78"); // 判断字符串num2是否以'78'结束
    System.out.println("字符串num1是以'22'开始的吗?" + b);
    System.out.println("字符串num1是以'78'结束的吗?" + b2); // 输出信息
    System.out.println("字符串num2是以'22'开始的吗?" + b3);
    System.out.println("字符串num2是以'78'结束的吗?" + b4);
    }
    }
    6.4.5判断字符串是否相等
    对字符串对象进行比较不能简单的使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同,即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符任然会返回flase。因此比较两个字符串的内容是否相等,应使用equals()方法和equalsIgnoreCase()方法。
    1、equals()方法
    如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回true
    语法:str.equals(String otherstr)
    其中,str和otherstr是要比较的两个字符串对象
    2、equalsIgnoreCase()方法
    使用equals()方法时,是区分大小写的,而是用equalsIgnoreCase()方法时,忽略大小写,返回的结果任然是boolean类型。语法:str.equalsIgnoreCase(String otherstr);
    6.4.6字母大小写转换
    字符串的toLowerCase()方法可以将字符串中所有的字符从大写字母改写为小写字母,而toUpperCase()方法可将字符串的小写字母改写为大写字母。
    1、toLowerCase()方法
    该方法将String转换为小写。如果字符串没有应该被转换的字符,则将原字符串返回;否则将返回一个新的字符串,将原字符串中每个应该进行转换的字符都转换成等价的小写的字符。字符长度与原字符长度相同。语法:str.toLowerCase(),其中,str是要进行转换的字符串。
    2、toUpperCase()方法
    该方法将String转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新的字符串,将原字符串中每个该进行大写转换的字符都转换成等价的大写字符。新字符串长度与原字符串长度相等。语法:str.toUpperCase(),其中str是要进行转换的字符串。
    6.4.7字符串分割
    使用split()方法可以使字符串按指定的分割字符或字符串对内容进行分割,并将分割后的结果存放在字符串数组中,split()方法提供了以下两种字符串分割形式。
    1、split(String sign) 
    该方法可以上根据给定的分割对字符串进行拆分。
    语法:str.split(String sign);其中,sign为分割字符串的分隔符,也可以使用正则表达式。
    2、split(String sign,int limit)
    该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数。
    语法:str.split(String sign,int limit)
    Sign:分割字符串的分割符,也可以使用正则表达式。
    Limit:限制的分割次数。
    【例】创建类,在主方法中创建String型变量,并将字符变量进行分割,将分割后的结果输出。
    public class text_11 {
    public static void main(String[] args) {
    String str="192.168.0.1";//创建字符串
    //按照"."进行分割,使用转义字符"\."
    String []firstArray=str.split("\.");
    //按照"."进行两次分割,使用转义字符"\."
    String []secondArray=str.split("\.",2);
    //输出原str的值
    System.out.println("str的原值是:["+str+"]");
    //输出全部分割的结果
    System.out.println("全部分割的结果是:");
    for(String a:firstArray){
    System.out.print("["+a+"]");
    }
    System.out.println();
    //输出两次分割的结果
    System.out.println("两次分割的结果是:");
    for(String a:secondArray){

    System.out.print("["+a+"]");

                            }
    System.out.println();
    }
    }

    6.5格式化字符串
    String类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式
    1、format(String format,Object…args)
    format:格式字符串
    args:格式化字符串中由格式说明符引用的参数。如果格式说明符以外的参数,则忽略这些额外的参数,参数的数目是可以变的,可以是0。
    2、format(Local 1,String format,Object…args)
    1:格式化过程中要应用的语言环境。如果1为null,则不进行本地化化
    format:格式化字符串
    args:格式化字符串中由格式说明符引用的参数,如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的。可以为0。
    6.5.1日期格式化
    【例】返回一个月的天数。
    Date date = new Date();
    String s = String format(“%te”,date);
    s 的值是当前日期中的天数,%te是转换符。
    【例】创建类,实现将当前日期信息以4位年份、月份全称,2位日期形式输出
    public class text_12 {
    public static void main(String[] args) { // 主方法
    Date date = new Date(); // 创建Date对象date
    String year = String.format("%tY", date); // 将date进行格式化
    String month = String.format("%tB", date);
    String day = String.format("%td", date);
    System.out.println("今年是:" + year + "年"); // 输出信息
    System.out.println("现在是:" + month);
    System.out.println("今天是:" + day + "号");
    }
    }
    6.5.2时间格式化
    使用format()方法不仅可以完成日期的格式化,也可以实现时间的格式化,时间的格式化转换符要比日期转换符更多,更精确。
    6.5.3格式化常见的日期时间组合
    格式化日期与时间的转换符定义了各种日期时间的组合,其中最常见的日期与时间组合形式如下:
     
    %tF     “年-月-日”格式(4位年份)                        2008-03-25   
    %tD     “月/日/年”格式(2位年份)                        03/25/08   
    %tc     全部日期信息和时间信息                       星期二 三月 25 15:20:00 CST2008   
    %tr     “时:分:秒PM(AM)格式(12时制)”       03:22:06下午   
    %tT     “时:分:秒 格式(24时制)”                       15:23:16  
    【例】在项目中创建类,主方法中实现将当前时间信息以及指定格式的日期信息输出
    public class text_13 {
    public static void main(String[] args) {
    Date date = new Date();//创建对象
    String time = String.format("%tc",date);//格式化date
    String form = String.format("%tF",date);
    //输出格式化的时间信息
    System.out.println("全部的时间信息是:"+time);
    System.out.println("年-月-日格式的时间是:"+form);
    }
    }    
    6.5.4常规类型转换
    常规类型的格式化可应用于任何的参数类型。
    6.6使用正则表达式
    正则表达式通常用于判断语句中,用来检查某一字符串是否满足某一格式,正则表达式是含有一些具有特殊意义字符的字符串,这些字符串称为正则表达式的元字符。
    说明:在正则表达式中,“.”代表任何一个字符,因此在正则表达式中如果要使用普通的“.”字符,必须使用转义字符“”。
     在正则表达式中,可以使用方括号括起来若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。例如:reg=“[abc]4”,这样的字符串a4,b4,c4都是和正则表达式匹配的字符串。方括号还可以为其他的格式。如:
    1、[^456]:代表4,5,6之外的任意字符。
    2、[a~r]:代表a~r中任何的一个字母。
    3、[a-zA-Z]:可表示任意的一个英文字母
    4、[a-e[g-z]]:代表a-e,或g-z中的任何一个字母(并运算)
    5、[a-o&&[def]]:代表字母def(交运算)
    6、[a-d&&[^bc]]:代表字母a、d(差运算)
     在正则表达式中允许使用限定修饰符来限定元字符出现的次数。例如:“A*”代表A可以在字符串中出现0次或多次
     
    6.7 StringBuilder类
     StringBuilder和String类一样,也用来代表字符串,只是由于StringBuilder的内部实现方式和String不同,所以StringBuilder在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。在实际操作上,如果经常要对一个字符进行修改,则使用StringBuilder类要更加合适一些。
    6.7.1 StringBuilder对象的创建
    1、public StringBuilder() 
    该方法用于构造一个空串缓冲区,其初始容量是16个字符。
    2、public StringBuilder(int capacity)
    该方法用来构造一个不带字符,但具有指定初始容量的字符串缓冲区。
    3、public StringBuilder(String str)
    构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容,该字符串的初始容量为16个字符,加上字符串参数的长度。
    6.7.2 StringBuilder类常用的方法
    1、append()方法
    该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据。语法:append(content),其中content表示要追加的内容,可以是任何数据类型或者其他对象
    2、insert(int offset,arg)方法
    该方法用于向字符串生成器中的指定位置插入数据内容,通过该方法的不同重载形式,可实现向字符串生成器中插入int、float、char、boolean等基本数据类型或其他对象。语法:insert(int offset arg)
    offset:字符串生成器的位置。该参数必须大于等于0,且小于等于此序列的长度
    arg:将插入至字符串生成器的位置。该参数可以是任何的数据类型多其他的对象。
    3、delete(int start,int end)
    移除此序列的子字符串的字符。该字符串从指定的start处开始,一直到索引end-1处的字符,如果不存在这些字符,则一直到序列的尾部。如果start等于end,则不发生任何更改。
    语法:delete(int start,int end)
    Start:将要删除的字符串的起点位置
    End:将要删除的字符串的起点位置

     
  • 相关阅读:
    Codeforces1420E. Battle Lemmings 题解 动态规划
    C++使用partial_sum求前缀和
    HDU6171 Admiral 题解 折半搜索
    HDU3017 Treasure Division 题解 折半搜索
    使用re.split 按标点+空格的一种分割办法
    实现CString的Format功能,支持跨平台
    转载一篇makefile,说的很详细
    Microsoft C++ 异常: std::system_error std::thread
    源码一样,运行结果不一致的解决办法
    记录一次阿里的电话面试
  • 原文地址:https://www.cnblogs.com/Firesun/p/9424696.html
Copyright © 2011-2022 走看看