资讯专栏INFORMATION COLUMN

Java™ 教程(操纵字符串中的字符)

Corwien / 2246人阅读

操纵字符串中的字符

String类有许多方法可用于检查字符串的内容,查找字符串中的字符或子字符串,更改大小写以及其他任务。

按索引获取字符和子字符串

你可以通过调用charAt()访问器方法获取字符串中特定索引处的字符,第一个字符的索引是0,而最后一个字符的索引是length()-1,例如,以下代码获取字符串中索引9处的字符:

String anotherPalindrome = "Niagara. O roar again!"; 
char aChar = anotherPalindrome.charAt(9);

索引从0开始,因此索引9处的字符为"O",如下图所示:

如果要从字符串中获取多个连续字符,可以使用substring方法,substring方法有两个版本,如下表所示:

方法 描述
String substring(int beginIndex, int endIndex) 返回一个新字符串,该字符串是此字符串的子字符串;
子字符串从指定的beginIndex开始,并扩展到索引endIndex - 1处的字符。
String substring(int beginIndex) 返回一个新字符串,该字符串是此字符串的子字符串;
integer参数指定第一个字符的索引;
这里,返回的子字符串延伸到原始字符串的末尾。

以下代码从Niagara palindrome获取从索引11延伸到但不包括索引15的子字符串,这是“roar”一词:

String anotherPalindrome = "Niagara. O roar again!"; 
String roar = anotherPalindrome.substring(11, 15);

操纵字符串的其他方法

以下是其他几种用于操作字符串的String方法:

方法 描述
String[] split(String regex)
String[] split(String regex, int limit)
搜索字符串参数(包含正则表达式)指定的匹配项,并相应地将此字符串拆分为字符串数组;
可选的整数参数指定返回数组的最大大小,正则表达式在标题为“正则表达式”的课程中介绍。
CharSequence subSequence(int beginIndex, int endIndex) 返回一个索引从beginIndexendIndex - 1构造的新字符序列。
String trim() 返回删除了前面和后面的空格的此字符串的副本。
String toLowerCase()
String toUpperCase()
返回转换为小写或大写的此字符串的副本,如果不需要转换,则这些方法返回原始字符串。
在字符串中搜索字符和子字符串

以下是一些用于在字符串中查找字符或子字符串的其他String方法,String类提供访问器方法,返回特定字符或子字符串在字符串中的位置:indexOf()lastIndexOf()indexOf()方法从字符串的开头向后搜索,而lastIndexOf()方法从字符串的末尾向前搜索,如果未找到字符或子字符串,indexOf()lastIndexOf()将返回-1

String类还提供了一个搜索方法contains,如果字符串包含特定的字符序列,则返回true,当你只需知道字符串包含字符序列但使用精确位置并不重要时,请使用此方法。

下表描述了各种字符串搜索方法。

方法 描述
int indexOf(int ch)
int lastIndexOf(int ch)
返回指定字符的第一次(最后一次)出现的索引。
int indexOf(int ch, int fromIndex)
int lastIndexOf(int ch, int fromIndex)
返回指定字符的第一次(最后一次)出现的索引,从指定的索引向前(向后)搜索。
int indexOf(String str)
int lastIndexOf(String str)
返回指定子字符串的第一次(最后一次)出现的索引。
int indexOf(String str, int fromIndex)
int lastIndexOf(String str, int fromIndex)
返回指定子字符串的第一次(最后一次)出现的索引,从指定的索引向前(向后)搜索。
boolean contains(CharSequence s) 如果字符串包含指定的字符序列,则返回true
CharSequence是一个由String类实现的接口,因此,你可以使用字符串作为contains()方法的参数。
将字符和子字符串替换到字符串中

String类只有很少的方法可以将字符或子字符串插入到字符串中,通常,不需要它们:你可以通过连接从字符串中删除的子字符串以及要插入的子字符串来创建新字符串。

但是,String类确实有四种方法可以替换找到的字符或子字符串,它们是:

方法 描述
String replace(char oldChar, char newChar) 返回一个新字符串,该字符串是使用newChar替换此字符串中出现的所有oldChar
String replace(CharSequence target, CharSequence replacement) 将此字符串中与文字target序列匹配的每个子字符串替换为指定的文字replacement序列。
String replaceAll(String regex, String replacement) 将与给定正则表达式匹配的字符串的每个子字符串替换为给定的replacement
String replaceFirst(String regex, String replacement) 将匹配给定正则表达式的字符串的第一个子字符串替换为给定的replacement
一个例子

下面的类Filename演示了如何使用lastIndexOf()substring()来隔离文件名的不同部分。

以下Filename类中的方法不执行任何错误检查,并假设其参数包含完整的目录路径和带扩展名的文件名,如果这些方法是生产代码,他们将验证他们的参数是否正确构造。
public class Filename {
    private String fullPath;
    private char pathSeparator, 
                 extensionSeparator;

    public Filename(String str, char sep, char ext) {
        fullPath = str;
        pathSeparator = sep;
        extensionSeparator = ext;
    }

    public String extension() {
        int dot = fullPath.lastIndexOf(extensionSeparator);
        return fullPath.substring(dot + 1);
    }

    // gets filename without extension
    public String filename() {
        int dot = fullPath.lastIndexOf(extensionSeparator);
        int sep = fullPath.lastIndexOf(pathSeparator);
        return fullPath.substring(sep + 1, dot);
    }

    public String path() {
        int sep = fullPath.lastIndexOf(pathSeparator);
        return fullPath.substring(0, sep);
    }
}

这是FilenameDemo程序,它构造一个Filename对象并调用它的所有方法:

public class FilenameDemo {
    public static void main(String[] args) {
        final String FPATH = "/home/user/index.html";
        Filename myHomePage = new Filename(FPATH, "/", ".");
        System.out.println("Extension = " + myHomePage.extension());
        System.out.println("Filename = " + myHomePage.filename());
        System.out.println("Path = " + myHomePage.path());
    }
}

以下是该程序的输出:

Extension = html
Filename = index
Path = /home/user

如下图所示,我们的extension方法使用lastIndexOf来定位文件名中最后一次出现的点(.),然后substring使用lastIndexOf的返回值来提取文件扩展名 — 也就是说,从字符串的点到结尾的子字符串。此代码假定文件名中包含点,如果文件名没有点,则lastIndexOf返回-1,并且substring方法抛出StringIndexOutOfBoundsException

另请注意,扩展方法使用dot + 1作为substring的参数,如果点字符(.)是字符串的最后一个字符,则dot + 1等于字符串的长度,则大于字符串中的最大索引(因为索引从0开始),这是substring的合法参数,因为该方法接受的索引等于但不大于字符串的长度,并将其解释为“字符串的结尾”。

上一篇:在数字和字符串之间转换 下一篇:比较字符串和字符串的部分

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72911.html

相关文章

  • Java教程(在数字和符串之间转换)

    在数字和字符串之间转换 将字符串转换为数字 通常,程序以字符串对象中的数字数据结束 — 例如,用户输入的值。 包装原始数字类型(Byte、Integer、Double、Float、Long和Short)的Number子类每个都提供一个名为valueOf的类方法,该方法将字符串转换为该类型的对象。下面是一个示例ValueOfDemo,它从命令行获取两个字符串,将它们转换为数字,并对值执行算术运算: ...

    Andrman 评论0 收藏0
  • Java教程(目录)

    Java™ 教程 Java教程是为JDK 8编写的,本页面中描述的示例和实践没有利用在后续版本中引入的改进。 Java教程是希望使用Java编程语言创建应用程序的程序员的实用指南,其中包括数百个完整的工作示例和数十个课程,相关课程组被组织成教程。 覆盖基础知识的路径 这些教程以书籍的形式提供,如Java教程,第六版,前往Amazon.com购买。 入门 介绍Java技术和安装Java开发软件并使用...

    lifesimple 评论0 收藏0
  • Java学习笔记3-Number,String,StringBuilder类

    摘要:创建字符串教程字符串长度用于获取有关对象的信息的方法称为访问器方法。类在中被提出,它和之间的最大不同在于的方法不是线程安全的不能同步访问。然而在应用程序要求线程安全的情况下,则必须使用类。 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,...

    pkhope 评论0 收藏0
  • Java教程(I/O流)

    I/O流 I/O流表示输入源或输出目标,流可以表示许多不同类型的源和目标,包括磁盘文件、设备、其他程序和内存数组。 流支持许多不同类型的数据,包括简单字节、原始数据类型、本地化字符和对象,有些流只是传递数据,其他人以有用的方式操纵和转换数据。 无论它们如何在内部工作,所有流都为使用它们的程序提供相同的简单模型:流是一系列数据,程序使用输入流从源读取数据,一次一个条目: showImg(https:...

    JerryWangSAP 评论0 收藏0
  • 一文解析SQLServer数据库

    摘要:表名列名列名列名值值值删楷体删除数据是最简单的语句了,只需要指定表名和查询条件就行。列名统计当前条件下查询出的数据的数量。 一文解析SQLServer数据库 目录...

    syoya 评论0 收藏0

发表评论

0条评论

Corwien

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<