理解Java中的子字符串:基本指南
在本文中,我们将帮助您理解java中的子字符串。我们不仅会给您一个理论解释,还会给出真实的代码示例,以帮助您形象地理解。我们将教您如何创建子字符串,并帮助您在字符串中找到子字符串。
但在学习它们之前,我们必须了解子字符串的基本知识。
什么是字符串和子字符串?
在java的背景下,字符串表示一系列字符。java中的每个字符串都是一个对象。java中的字符串可以包含字符、符号,甚至空格。另一方面,java中的子字符串是java字符串的一部分或子集。
例如,”geek”是”yaoweibin”的一个子字符串。子字符串帮助您获取字符串的特定部分。
如果您有一个名字为”john doe”,并且您只想要名字”john”,您可以通过子字符串轻松获得它。此外,假设您有一个名字列表”john, jack, jolly”,并且您想要确定其中是否包含”john”,您也可以使用子字符串来完成。这些只是简单的例子。我们一旦了解它们,就可以在各种操作中使用子字符串。
现在我们已经了解了java中子字符串的概念,接下来让我们了解如何创建和使用java中的子字符串。
提取子字符串
#1. 使用'substring()'方法
‘substring()'方法让我们可以很容易地创建子字符串。它最多接受两个参数作为输入-startindex或startindex和endindex,并返回我们想要的子字符串。
根据参数的数量,我们可以使用两种方式来使用它。现在,让我们详细了解它们。
substring(int startindex)
首先,我们可以使用'substring(startindex)'形式的方法。在这里,该方法接受一个整数值作为输入,其中输入是子字符串的起始位置。它返回从提供的起始索引到原始字符串的结尾的字符串。
例如,让我们看一下以下代码:
public class substrings{
public static void main(string args[]){
string str="yaoweibin";
system.out.println("给定字符串: " + str);
system.out.println("子字符串: " +str.substring(4)); //字符串的索引从0开始
}
}
输出:
给定字符串: yaoweibin
子字符串: flare
从输出中,我们可以看到输入字符串为”yaoweibin”,返回值为子字符串”flare”。它从给定的索引(4)开始,即从位置5到字符串的结尾。
substring(int startindex, int endindex)
这是使用string类的substring方法的另一种方式。我们可以向substring方法传递两个整数。一个起始索引和一个结束索引。要使用此方法,我们必须以'substring(startindex,endindex)'的格式使用该方法。
为了进一步理解它,让我们看一些示例代码:
public class substrings {
public static void main(string args[]) {
string str = “yaoweibinfans”;
system.out.println(“给定的字符串:” + str);
system.out.println(“子字符串:” + str.substring(4, 9)); //你从索引4到索引8得到一个子字符串。
}
}
输出:
给定的字符串:yaoweibinfans
子字符串:flare
如我们所见,给定的字符串“yaoweibinfans”输出了子字符串“flare”。我们给出了起始索引4和结束索引9。它从索引为4的元素开始,直到索引8结束。 我们必须注意它不打印具有结束索引的元素。它给了我们一个子字符串,其中包括所有元素直到结束索引,但不包括具有结束索引的元素。
#2. 使用‘split()’方法
‘split()’是java中string类的另一个方法,它帮助我们创建子字符串。当多个信息片段存储在一个具有公共分隔符字符的字符串中时,它非常有用。
语法中提到的“regex”可能会让您感到有点吓人,因此在继续之前,让我们了解一下正则表达式是什么。正则表达式是“regular expressions”的缩写。正则表达式是一系列描述字符串或文本中模式的字符序列。在split方法的上下文中,正则表达式是我们的分隔符。
‘split()’方法最多可以接受两个变量作为输入,它们是一个正则表达式字符串和一个限制整数。正则表达式是分隔符,当找到时,将原始字符串分为两部分 – 正则表达式之前的部分和正则表达式之后的部分。
例如,假设您要用“bcd”作为分隔符将字符串“abcdef”拆分。我们将得到结果字符串“a”和“ef”。
该方法返回一个包含分隔字符串的数组。我们可以只指定正则表达式,也可以同时指定正则表达式和限制。让我们逐个了解如何调用此方法的多种方式。
split(string regex)
第一种方法只接收正则表达式字符串,格式为‘split(regex)’。它没有限制变量;因此,返回数组中的所有分隔子字符串。
让我们通过一些示例代码来清楚地理解:
public class substrings{
public static void main(string args[]){
string str="geek%flare";
string[] substrings=str.split("%");
system.out.println("给定的字符串:" + str);
system.out.println("第一个子字符串:" + substrings[0]);
system.out.println("第二个子字符串:" + substrings[1]);
}
}
输出:
给定的字符串:geek%flare
第一个子字符串:geek
第二个子字符串:flare
从代码中我们可以看到,给定的字符串有一个分隔符正则表达式“%”。它不一定是一个单字符,可以是具有任意数量字符的任何字符串。‘split()’方法会忽略此正则表达式,并给我们所有通过此正则表达式分隔的字符串。子字符串存储在数组中。
在代码中,给定的字符串是“geek%flare”。所以,我们得到一个包含两个元素的数组,它们分别是“geek”和“flare”。然后我们通过它们各自的索引访问它们,它们的索引分别是0,1,并且我们将“geek”和“flare”打印到控制台。
在这里我们还应该注意,如果没有向方法传递参数,它将会抛出一个错误。但是如果我们将一个空字符串(””)作为正则表达式(regex),我们将得到每个单独的字符作为子字符串。让我们通过例子来进行演示。
import java.util.arrays;
public class substrings{
public static void main(string args[]){
string str="geek%flare";
string[] substrings=str.split("");
system.out.println(arrays.tostring(substrings));
}
}
输出:
[g, e, e, k, %, f, l, a, r, e]
从例子中可以看出,由于正则表达式参数是一个空字符串,它会将所有字符作为分离的子字符串返回,并且我们可以通过打印“split()”方法的输出数组清楚地看到这一点。
split(string regex,int limit)
使用该方法的第二种变体,我们可以更好地控制输出,并且可以进一步调整“split()”方法的输出。在这种情况下,“split()”方法以两个变量作为输入。在这种情况下,我们除了正则表达式之外,还以‘split(regex, limit)’的指定格式给出了一个限制参数。
‘limit’是输出的结果字符串的数量。根据限制的值,可能有三种可能性:
情况1: 如果limit>0,结果数组将包含输出,但最多只应用分隔(limit-1)次。在这种情况下,结果数组将不包含超过指定限制的更多元素,并且所有未被分隔的剩余字符串将被存储为它原来的样子。让我们通过一些代码来更容易理解。
import java.util.arrays;
public class substrings{
public static void main(string args[]){
string str="geek%flare%is%the%best";
string[] substrings=str.split("%",2);
system.out.println(arrays.tostring(substrings));
}
}
输出:
[geek, flare%is%the%best]
请注意输出中只有两个元素,这是限制参数中给定的数字。同时,注意该分割只应用了一次,所以(limit-1)次。
然而,如果正则表达式连续出现两次(“%%”),它将生成空的子字符串。看看下面的代码以更好地理解。
import java.util.arrays;
public class substrings{
public static void main(string args[]){
string str="geek%flare%is%%the%best%%%";
string[] substrings=str.split("%",5);
system.out.println(arrays.tostring(substrings));
}
}
输出:
[geek, flare, is, , the%best%%%]
基本上,如果“%”后面跟着另一个“%”或字符串的末尾,它就会变成一个空的子字符串。
情况2: 如果limit<0,则分割操作将应用尽可能多的次数,而数组将包含空的子字符串,如果正则表达式连续出现两次(“%%”)。
使用`split()`方法将字符串拆分为子字符串。`split()`方法使用给定的正则表达式作为分隔符,并返回一个字符串数组,其中包含原始字符串中的子字符串。
“`java
import java.util.arrays;
public class substrings{
public static void main(string args[]){
string str=”geek%flare%is%%the%best%%%”;
string[] substrings=str.split(“%”,-1);
system.out.println(arrays.tostring(substrings));
}
}
“`
输出结果:
“`
[geek, flare, is, , the, best, , , ]
“`
从输出结果可以看出,`split()`方法尽可能多次地应用分隔符,并且还存在空子字符串。
如果将`limit`参数设置为0,`split()`方法将尽可能多次地应用分隔符,但是在数组中会丢弃字符串末尾的所有空子字符串。
“`java
import java.util.arrays;
public class substrings{
public static void main(string args[]){
string str=”geek%flare%is%%the%best%%%”;
string[] substrings=str.split(“%”,0);
system.out.println(arrays.tostring(substrings));
}
}
“`
输出结果:
“`
[geek, flare, is, , the, best]
“`
我们可以看到,当`limit`参数为-1和0时,输出结果非常相似,但是没有尾随的空子字符串。换句话说,字符串数组末尾的空子字符串被忽略。
还要注意,如果字符串中不存在正则表达式,则返回整个原始字符串作为结果。
### 查找字符串是否包含子字符串
除了从现有字符串创建子字符串之外,我们还可以指定一个子字符串并查找该子字符串是否存在于字符串中。这是一种快速简便的方法来查询子字符串,在许多用例中非常有用。但是我们如何做到呢?各种方法可以帮助我们实现这一目标。让我们逐个了解它们。
使用`contains()`方法:
我们可以使用`contains()`方法非常容易地查找子字符串的存在。字符串类的该方法接受一个字符串作为输入,即我们的子字符串,并返回一个布尔值,用于检查子字符串是否存在于字符串中。可以在if-else块、一元运算符和其他各种位置使用此方法来实现复杂逻辑。
让我们更多地了解一下这个方法。
“`java
public class substrings{
public static void main(string args[]){
string str=”yaoweibin”;
system.out.println(“does it contain flare? n”+ str.contains(“flare”));
}
}
“`
输出结果:
“`
does it contain flare?
true
“`
该代码检查字符串“yaoweibin”是否包含单词“flare”,并在成功找到时返回布尔值“true”,从而确认子字符串的存在。
“`java
public class substrings{
public static void main(string args[]){
string str=”yaoweibin”;
system.out.println(“does it contain flare? n”+ str.contains(“flare1”));
}
}
“`
输出结果:
“`
does it contain flare?
false
“`
通过这个例子,我们了解到如果子字符串不在字符串中,该方法将返回false来表示其不存在。因此,我们可以很容易地确定子字符串是否存在。
查找子字符串的位置
#1. 使用 ‘indexof()':
‘indexof()'方法可用于查找子字符串的存在性以及找到其索引。该方法以字符串或字符作为输入,并给出第一次出现的位置。但它只能给出第一次出现的索引,并无法确认其他出现的情况。还要注意的是,如果子字符串不存在,则该方法返回-1。
所以让我们更深入地探索一下这个方法。
public class substrings{
public static void main(string args[]){
string str="yaoweibinyaoweibin";
system.out.println("flare的索引值: "+ str.indexof("flare"));
}
}
输出:
flare的索引值: 4
在这个例子中,字符串“yaoweibinyaoweibin”中子字符串“flare”的第一次出现从索引4开始。所以,如预期的那样,函数返回了索引。
#2. 使用 ‘lastindexof()':
‘lastindexof()'非常类似于'indexof()'。这两个方法都接受子字符串作为输入,并返回其位置的索引。当它在指定的字符串中找不到子字符串时,它甚至具有相同的返回值。这两个方法都会对于查找失败返回-1。
但是,'indexof()'返回的是子字符串的第一次出现的索引,而'lastindexof()'返回的是最后一次出现的索引。
让我们通过代码来看看它的实际应用:
public class substrings{
public static void main(string args[]){
string str="yaoweibinyaoweibin";
system.out.println("flare的最后一个索引值: "+ str.lastindexof("flare"));
}
}
输出:
flare的最后一个索引值:13
观察这个输出,我们可以理解'lastindexof()'方法的行为与预期一致,并且我们得到了字符串“yaoweibinyaoweibin”中子字符串“flare”的最后一次出现的索引。
常见问题解答
如何使用'split()'方法创建非空的子字符串?
如果在主字符串中有多个正则表达式实例连续出现(例如“hello%%hi”,其中正则表达式是“%”),'split()'方法会将第一个实例视为分隔字符,而其余部分将返回一个空字符串。为了解决这个问题,我们可以将限制参数指定为0。这样它将只给出非空字符串作为输出。
‘indexof()'是否返回所有子字符串实例的索引?
不,'indexof()'不会返回所有子字符串实例的索引。使用'indexof()',我们得到一个整数返回值,其中包含子字符串的第一次出现的索引。但是如果找不到子字符串,该方法将返回-1。
如果给定的索引在字符串中不存在,'substring()'方法会返回什么?
如果给定的起始索引和结束索引在字符串中不存在,编译器将抛出一个错误。错误应该是“java.lang.stringindexoutofboundsexception: ”,并且它将简单地不执行。
结论
在本文中,我们讨论了各种方法和基本要素,以便开始使用子字符串。我们讨论了创建子字符串和检查字符串中是否存在子字符串的方法。这将使您更好地了解如何使用子字符串。遵循示例并多练习以彻底理解子字符串。
接下来,您可以查看我们的 java 面试问题列表。