Java中字符串String的简单介绍

字符串对于大多数的编程语言来说,是一个绕不过的话题,当然,Java也不例外。Java提供了三个类来支持字符串,分别为:String、StringBuffer和StringBuilder。其中,String是不可变字符串,而StringBuffer和StringBuilder是可变字符串。只不过StringBuffer是线程安全的字符串类,而StringBuilder不是线程安全的字符串类。

 

String类是一个不可变的字符串类。也就是说,一个字符串对象一旦被创建,其字符序列便不可以被改变。

对于字符串String来说,常用的方法有:

  • 重写Object的hashCode和equals方法

对于String来说,重写了继承自Object类的hashCode和equals方法,从而使得值相同的两个字符串,调用equals时返回true,调用hashCode方法时得到的结果一样。

Object和equals的示例代码如下所示:

public class StringTest {

    public static void main(String[] args) {

        // equals方法测试
        String str = "hello world";
        String str2 = "hello world";
        System.out.println("str和str2执行equals方法结果:" + str.equals(str2));

        // hashCode方法测试
        System.out.println("str的hashCode结果为:" + str.hashCode());
        System.out.println("str2的hashCode结果为:" + str2.hashCode());
    }
}

执行结果如下图所示:

  • 取子字符串

取字符串有两个方法,分别为:

  1. String substring(int beginIndex) :该方法从beginIndex开始,截取到最后一个字符结束的子字符串。
  2. substring(int beginIndex, int endIndex):该方法从beginIndex开始,截取到endIndex处不包括endIndex的子字符串。

两个方法的示例代码如下所示:

public class StringTest {

    public static void main(String[] args) {

        String str = "hello world";
        // 索引从0开始,索引为6对应第7个字符,因此结果是world
        System.out.println(str.substring(6));

        /*
         索引从0开始,索引6对应第7个字符,索引8代表第9个字符,取第7个到第9个不包括第9个字符,
         结果为wo
         */
        System.out.println(str.substring(6, 8));
    }
}

执行结果如下图所示:

  • 字符串使用空格缩径()

使用空格缩径的方法为:indent方法。接受参数是一个整数,表示缩径多少位。示例代码如下所示:

public class StringTest {

    public static void main(String[] args) {

        String str = "hello world";
        System.out.println("str为:\n" + str);
        System.out.println("str缩径4个空格为:\n" + str.indent(4));
    }
}

执行结果如下图所示:

  • 获取某个字符或某个子字符串在字符串的位置

获取某个字符或某个子字符串在字符串的位置的方法有四个,分别为:

  1. int indexOf(int ch):获取某个字符在字符串中首次出现的位置,这里之所以是ch类型,是因为所有字符类型在内存中是以Unicode编码的形式存在。而且本人使用JDK过高,也许之前的版本保留有indexOf(char ch)的方法。所以大家要区别对待。
  2. int indexOf(int ch, int fromIndex):从fromIndex处开始,获取某个字符在字符串中首次出现的位置。
  3. int indexOf(String str):获取某个子字符串在该字符串中首次出现的位置。
  4. int indexOf(String str, int fromIndex):从fromIndex处开始,获取某个子字符串在该字符串中首次出现的位置。
  5. int lastIndexOf(int ch): 获取某个字符在字符串中最后出现的位值。
  6. int lastIndexOf(int ch, int fromIndex):从fromIndex处开始,获取某个字符在该字符串中最后出现的位置。
  7. int lastIndexOf(String str):获取某个子字符串在该字符串中最后出现的位置。
  8. int lastIndexOf(String str, int fromIndex):从fromIndex处开始,获取某个子字符串在该字符串中最后出现的位置。

示例代码如下图所示:

public class StringTest {

    public static void main(String[] args) {

        String str = "how old are you";
        System.out.println("str的值为:" + str);
        System.out.println("'o'在str中首次出现位置为:" + str.indexOf('o'));
        System.out.println("'o'在str中从2之后开始首次出现的位置为:" + str.indexOf('o', 2));
        System.out.println("'o'在str中最后出现的位置为:" + str.lastIndexOf('o'));
        System.out.println("'o'在str中从6往前最后出现的位置为:" + str.lastIndexOf('o', 6));

        String str2 = "no zuo no die no say no bibi";
        System.out.println("str2的值为:" + str2);
        System.out.println("\"no\"在str2中首次出现的位置为:" + str2.indexOf("no"));
        System.out.println("\"no\"在str2从1开始之后首次出现的位置为:" + str2.indexOf("no", 1));
        System.out.println("\"no\"在str2中最后出现的位置为:" + str2.lastIndexOf("no"));
        System.out.println("\"no\"在str2中从16往前最后出现的位置为:" + str2.lastIndexOf("no", 16));
    }
}

执行结果如下图所示:

  • 以某个字符串开始或结束

以某个字符串开始或结束的方法有三个,分别为:

  1. boolean startWith(String prefix):该方法表示该字符串是否以某个给定的字符串prefix开始。
  2. boolean startWith(String prefix, int toffset):该方法将该字符串偏移toffset位后,是否以某个给定的字符串prefix开始。
  3. boolean endWith(String suffix):该方法表示该字符串是否以某个给定的字符串suffix结尾。

示例代码如下图所示:

public class StringTest {

    public static void main(String[] args) {

        String str = "how are you, no zuo no die";
        System.out.println("str是否以how开始:" + str.startsWith("how"));
        System.out.println("str偏移4位后是否以are开始:" + str.startsWith("are", 4));
        System.out.println("str是否以die结尾:" + str.endsWith("die"));
    }
}

执行结果如下图所示:

  • 大小写转换

大小写转换的方法有:

String toLowerCase():将字符串全部转换为小写字母,仅字母受影响,使用当前系统的语言环境

String toLowerCase(Locale locale):将字符串全部转换为小写,仅字母受影响,使用传入的语言环境。

String toUpperCase():将字符串全部转换为大写,仅字母受影响,使用当前系统的语言环境

String toUpperCase(Locale locale): 将字符串全部转换为大写,仅字母受影响, 使用传入的语言环境。

我想大家一定对toLowerCase(Locale locale)和ttoUpperCase(Locale locale)这两个方法有所疑惑。刚开始我也一样,在网上找了很久,才明白,实际上对有些国家来说,英文字母的大小写不见得跟我们认知的一样。典型的就是土耳其。比如"I"转换为小写后为“ı”,"i"转换为大写为“İ”。所以当系统环境默认为土耳其语言环境时,使用大小转换所得到的结果就未必如我们所料了。

示例代码如下所示:

public class StringTest {

    public static void main(String[] args) throws IOException {

        String str = "I like him";
        Locale trLocale = new Locale("tr");

        // 使用默认的语言环境转换大小写
        System.out.println("str在默认语言环境下(zh_CN)转换为大写为:" + str.toUpperCase());
        System.out.println("str在默认语言环境下(zh_CN)转换为小写为:" + str.toLowerCase());

        // 使用土耳其语言环境转换大小写
        System.out.println("str在土耳其语言环境下(tr)转换为小写为:" + str.toLowerCase(trLocale));
        System.out.println("str在土耳其语言环境下(tr)转换为小写为:" + str.toUpperCase(trLocale));
    }
}

执行结果如下图所示:

  • 字符替换

字符替换的方法有:

  1. String replace(char oldChar, char newChar):用新字符替换字符串中的所有旧字符。
  2. String replace(CharSequence target, CharSequence replacement):用字符串中的target字符串全部替换为replacement字符串。需要注意的是,这里的字符串是广义的字符串。包括:String,StringBuffer和StringBuilder。
  3. String replaceAll(String regex, String replacement): 用新字符串替换匹配正则表达式的所有字符串。
  4. String replaceFirst(String regex, String replacement): 用新字符串替换首个匹配正则表达式的字符串。

示例代码如下图所示:

public class StringTest {

    public static void main(String[] args) throws IOException {

        String str = "no zuo no die";
        System.out.println("str中'n'替换成'好'的结果为:" + str.replace('n', '好'));
        System.out.println("str中的\"no\"替换为\"不\"的结果为:" + str.replace("no", new StringBuilder("不")));

        String str2 = "tom2jerry4happy8";
        System.out.println("str2中的数字全部替换为\"数字\"的结果为:" + str2.replaceAll("\\d", "数字"));
        System.out.println("str2中的首个数字替换为\"数字\"的结果为:" + str2.replaceFirst("\\d", "数字"));

    }
}

执行结果如下图所示:

  • 字符串切分

字符串切分有两个方法,分别为:

  1. String[] split(String regex):根据指定的正则表达式来切分字符串
  2. String[] split(String regex, int limit):根据指定的正则表达式来切分字符串,切分结果限定为limit个。

示例代码如下所示:

public class StringTest {

    public static void main(String[] args) throws IOException {

        String str = "tom2jerry4hehe8oh";
        System.out.println("str以数字分割后结果为:" + Arrays.toString(str.split("\\d")));
        System.out.println("str以数字分割为三个数组的结果为:"
                + Arrays.toString(str.split("\\d", 3)));

    }
}

示例代码如下图所示:

  • 其他

除了以上列举的方法外,还有一些常用的方法:

  1. int length(): 获取字符串的长度
  2. boolean equalsIgnoreCase(String anotherString): 比较是否与另一个字符串相等,忽略大小写。
  3. char charAt(int index): 获取指定索引处的字符
  4. boolean matches(String regex):判断该字符串是否可以匹配指定的字符串。
  5. char[] toCharArray():将该字符串转换为字符串数组。
  6. String trim():截取两端的空格。

示例代码如下所示:

public class StringTest {

    public static void main(String[] args) throws IOException {

        String str = " hello world ";
        System.out.println("str的长度为:" + str.length());
        String str2 = " Hello World ";
        System.out.println("str是否与str2在忽略大小写情况下相等:" + str.equalsIgnoreCase(str2));
        System.out.println("str索引为4处的字符为:" + str.charAt(5));
        System.out.println("str是否匹配正则表达式\" hello [\\w]* \":" + str.matches(" hello [\\w]* "));
        System.out.println("str转换为字符数组为:" + Arrays.toString(str.toCharArray()));
        System.out.println("str截取两侧的空格后结果为:" + str.trim());
    }
}

执行结果如下图所示:

自此关于字符串String的介绍便已经完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值