Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查句子中的字符串顺序_Java_String - Fatal编程技术网

Java 检查句子中的字符串顺序

Java 检查句子中的字符串顺序,java,string,Java,String,我想知道一个词是否在另一个词之前出现。部分单词不匹配 一些示例测试: “嗨,我叫AB,我来自伦敦,我喜欢这里…” 您可以查看,它返回一个表示子字符串位置的整数,如果找不到,则返回-1。您可以使用它来查看哪些字符串先于另一个字符串 yourString.matches(".*? Hi\\b.*? AB\\b.*") 这将确保你在两个单词之间有空格,并且你在匹配整个单词 如果你处理的是拉丁美洲的东西,在这些东西中,puncuation可以出现在单词之前,这是更普遍的 yourString.matc

我想知道一个词是否在另一个词之前出现。部分单词不匹配

一些示例测试:

“嗨,我叫AB,我来自伦敦,我喜欢这里…”


您可以查看,它返回一个表示子字符串位置的整数,如果找不到,则返回-1。您可以使用它来查看哪些字符串先于另一个字符串

yourString.matches(".*? Hi\\b.*? AB\\b.*")
这将确保你在两个单词之间有空格,并且你在匹配整个单词

如果你处理的是拉丁美洲的东西,在这些东西中,puncuation可以出现在单词之前,这是更普遍的

yourString.matches(".*?\\bHi\\b.*?\\bAB\\b.*")
打破你的习惯

.*? = anything, even the empty string.  Ignore the ? for now.
\\b = a word boundary
所以regex的意思是

HiAB

这和

if "Hi" is before "AB" -> return true
它将被用作

if(yourString.matches(".*?\\bHi\\b.*?\\bAB\\b.*")){
    return true;
}

您可以使用
indexOf
方法获取每个单词的第一个匹配项,然后进行检查。例如:

String sentence = "Hi my name is AB, I’m from London and I love it here …";

int fromIndex = sentence.indexOf("from");
int hiIndex = sentence.indexOf("Hi");

if (fromIndex < hiIndex)
    System.out.println("false");
else
    System.out.println("true");
String-句子=“嗨,我的名字是AB,我来自伦敦,我喜欢这里……”;
int fromIndex=句子.indexOf(“from”);
int hiIndex=句子.indexOf(“Hi”);
if(fromIndex

请注意,如果句子中不存在单词,则
indexOf
将返回
-1

有几种方法:

  • 使用-这可能是最简单的方法。获取字符串的索引,并进行比较。索引较低的字符串位于另一个字符串之前
  • 使用正则表达式-构造一个正则表达式,以所需顺序匹配字符串,例如
    “from.*?Hi”
    。这种方法可能使用多个正则表达式
第一种方法的一个转折点是从第一个单词的索引加上单词的长度开始搜索第二个单词,并避免索引比较。使用许多搜索和长字符串可以节省一些CPU周期


注意:根据要求,当子字符串上的匹配出现假阳性时,您可能需要注意。如果您的要求是
“嗨,我的朋友AB”
应该匹配,但
高于AB“
不应匹配,那么在单词两端带有
\b
锚定的正则表达式方法将提供比操作字符串索引更简单的解决方案。上面的
”from.*?Hi“
正则表达式变成
”\\bfrom\\b.*\\bHi\\b”
字符串。匹配(“Hi..AB”);
使用正则表达式:
“Hi my my name is AB,”.matches(“.*Hi.*AB.”
-注意前导和尾随的
*
,这是必要的,因为
matches()
尝试匹配整个字符串。基本问题是:您想要实现什么?您将如何处理不同的输入,例如:“我来自伦敦,我说你好。我的名字是AB,我爱我的城市……”?你关心它是否是一个完整的单词吗?例如,你想让Hi与High这个词匹配吗?我想不,但如果是的话,这是一个未说明的要求。你能告诉我如何使用它吗。谢谢你,非常感谢,朋友。我有一个小问题,我有一些句子没有出现。我想这是当一个词出现在另一个词之前。。我使用的方法是在这个答案中,如果你看链接,我希望它显示找到的文本,即使一个词在另一个词之前找到…请让我知道如何修复它…它可能非常简单,但我不熟悉regexi如果你给我一个可能更容易的句子,我有很多句子mate lol…作为一个例子,您可以使用链接中使用的同一句话,即“Floyd Mayweather Jr是一名美国职业拳击手,目前作为职业拳击手不败,是一名五级世界冠军,在四个不同的重量级别赢得了十项世界冠军和直系冠军。”你想用什么来匹配这句话?@重复数据消除者谢谢你的评论!你是对的,误报可能是一个问题。我添加了一个注释来解释这一点。@dasblinkenlight谢谢你的回答。我不确定我是否可以,但我希望我可以接受多个答案,这样我也可以接受你的答案。
String sentence = "Hi my name is AB, I’m from London and I love it here …";

int fromIndex = sentence.indexOf("from");
int hiIndex = sentence.indexOf("Hi");

if (fromIndex < hiIndex)
    System.out.println("false");
else
    System.out.println("true");