Java 带子字符串的StringIndexOutOfBoundsException
这是我的代码:Java 带子字符串的StringIndexOutOfBoundsException,java,android,Java,Android,这是我的代码: String s = word; String[] split = s.split(Dictionary.searchTerm); String s1 = split[0]; String s2 = split[1]; String cut1 = "..."; String cut2 = s2.substring(0, 20); 我得到java.lang.StringIndexOutOfBoundsException:length=17;regionStart=0;由线串cut
String s = word;
String[] split = s.split(Dictionary.searchTerm);
String s1 = split[0];
String s2 = split[1];
String cut1 = "...";
String cut2 = s2.substring(0, 20);
我得到java.lang.StringIndexOutOfBoundsException:length=17;regionStart=0;由线串cut2=s2引起的区域长度=20。子串0,20
我想做的是,例如,这是原始字符串s
谷歌
安卓
Gmail
Youtube
苹果
网间网操作系统
雨衣
微软
窗户
searchTerm是Youtube,因此所需的字符串是
…Youtube苹果
如何解决这个问题?基本上,我试图实现的是将搜索词之前的字符串替换为。。。并在searchTerm之后添加字符串的一部分。将抛出StringOutOfBoundsException,因为您假设cut2在索引20处结束,并且字符串没有那么长。您需要计算s2的长度,而不是硬编码20。如果您希望s2的长度为21,您可能需要检查以确保它存储的是您认为它存储的内容。您的需求可以通过以下代码实现,而不是经过严格测试
String s = "Google Android Gmail Youtube Apple iOS Mac Microsoft Hewlett packard Windows";
String[] keywords = s.split("\\s+");
String searchTerm = "Youtube";
String endText = "";
for(int index = 0; index < keywords.length; index++) {
if(keywords[index].contentEquals(searchTerm)) {
if(index != (keywords.length - 1)) {
endText = endText + "..." + " " + searchTerm + " " + keywords[index + 1];
} else {
endText = endText + "..." + " " + searchTerm + " " + keywords[0];
}
}
}
// Here the endText would be: "... Youtube Apple"
字符串cut1=s1.replaces1。。。;与字符串cut1=…;相同。。。;。在这一行你想干什么?另外,请在代码示例中输入适当的值。不要说s是某个文本,而是将其放在代码s=some text.;中。。;。Dictionary.searchTerm也一样。抱歉。只想问一下,searchTerm实际上与所需字符串的关系如何。字符串s实际上是来自Sqlite数据库中某列的数据。Dictionary.searchTerm是用户在搜索栏中输入的文本。它是动态变化的,并附加到TextChangedListenerYes,我们理解这一点,但为了使您的示例更简单,最好用适当的值填充它,以便我们可以将其复制粘贴到我们的IDE并处理它。慢慢来,创建一个例子,让我们和未来的读者很容易地重现你的问题。不管怎样,你的错误是显而易见的。在s2.0子串中,20;您正试图减去前20个字符,但s2只包含17个字符的字符串。这里的预期结果是什么;只是保存要设置的字符串值的字符串的初始化。您可以发布您的代码,说明您是如何执行setText的,因为我已经测试了代码,它工作得非常好。谢谢,如果我将原始数据放在java代码中,即Google\n+Android\n,它就工作了。问题是,字符串s来自sqlite数据库,并且保存的文本没有\n字符。但在sqlite数据库中,Google、Android等都用新行分隔。您从sqlite数据库中获得的字符串是什么,您是否将所有关键字作为单独的字符串获得?如果是,则无需使用拆分函数创建数组,您只需创建一个arraylist并将数据库中的字符串添加到列表中,然后像我们在此处使用数组一样使用该列表。sqlite数据库中的字符串与我的问题一样,Google Android直到Windows中的单个字符串。没有\n字符。我使用DB Browser并按return键创建新行。在这种情况下,可以使用s.replaceAll\\s+,;拆分字符串;如果所有关键字都是没有空格的单个单词,则使用s.split。