Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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_Groovy_Substring - Fatal编程技术网

Java 查找以某个单词开头和结尾的子字符串

Java 查找以某个单词开头和结尾的子字符串,java,groovy,substring,Java,Groovy,Substring,我试图使用groovy或java从文本文件的每一行提取子字符串。我正在努力寻找一种有效的方法来处理长字符串,其中包含我感兴趣的子字符串。假设我有以下字符串: String lineNew = "Error in file C:/Desktop/calc.groovy: assert "A1" == "A2"" 现在我想从这个字符串中提取两条信息:首先,我想获取文件名,它总是以C://开头,以.groovy结尾。 其次,我想得到错误,它

我试图使用groovy或java从文本文件的每一行提取子字符串。我正在努力寻找一种有效的方法来处理长字符串,其中包含我感兴趣的子字符串。假设我有以下字符串:

String lineNew = "Error in file C:/Desktop/calc.groovy: assert "A1" == "A2""
现在我想从这个字符串中提取两条信息:首先,我想获取文件名,它总是以C://开头,以.groovy结尾。 其次,我想得到错误,它将始终是groovy:后面的子字符串

所以我的问题基本上是在一个字符串中找到子字符串,它以一个特定的词开始和结束。由于这个原因,像startswith、matches、substring这样的方法对单词的位置都不起作用


有没有人遇到过同样的问题,或者知道一种有效的方法来处理这类问题?非常感谢您的帮助,请提前感谢

您需要做的是获取C:/and.groovy的索引。比如说:

int start = lineNew.indexOf("C:/");
int end = lineNew.indexOf(".groovy");
String filename = lineNew.substring(start, end);
int errIndex = lineNew.indexOf(whatever marks the end of the error);
String error = lineNew.substring(end, errIndex);

我已经有一点没有使用Java了,所以我忘记了substring方法是包含的还是indexOf方法返回的确切索引,所以您必须找出其中的一个,但是一般逻辑应该可以工作。

您需要做的是取C:/and.groovy的索引。比如说:

int start = lineNew.indexOf("C:/");
int end = lineNew.indexOf(".groovy");
String filename = lineNew.substring(start, end);
int errIndex = lineNew.indexOf(whatever marks the end of the error);
String error = lineNew.substring(end, errIndex);

我已经有一点没有使用Java了,所以我忘记了substring方法是包含的还是indexOf方法返回的确切索引,所以您必须找出其中的一个,但是一般逻辑应该可以工作。

您可以看看模式匹配来解决这个问题

公共静态无效字符串[]args{ 字符串lineNew=文件C:/Desktop/calc.groovy中的错误:assert\A1\=\A2\; //定义两个组,一个用于文件名,另一个用于消息 Pattern=Pattern.compile.*C:.*.groovy:\\s.*; Matcher Matcher=pattern.matcherlineew; 如果匹配器匹配{ System.out.printlnmatcher.group1;//文件名 System.out.printlnmatcher.group2;//错误消息 } }
你可以看看模式匹配来解决这个问题

公共静态无效字符串[]args{ 字符串lineNew=文件C:/Desktop/calc.groovy中的错误:assert\A1\=\A2\; //定义两个组,一个用于文件名,另一个用于消息 Pattern=Pattern.compile.*C:.*.groovy:\\s.*; Matcher Matcher=pattern.matcherlineew; 如果匹配器匹配{ System.out.printlnmatcher.group1;//文件名 System.out.printlnmatcher.group2;//错误消息 } }
尝试捕获组。这是Groovy代码:

def matches = lineNew =~ /(C:.*?\.groovy): (.*)/
def sourceFile = matches[0][1]     // C:/Desktop/calc.groovy
def errorMessage = matches[0][2]   // assert "A1" == "A2"

尝试捕获组。这是Groovy代码:

def matches = lineNew =~ /(C:.*?\.groovy): (.*)/
def sourceFile = matches[0][1]     // C:/Desktop/calc.groovy
def errorMessage = matches[0][2]   // assert "A1" == "A2"

你可以尝试使用正则表达式——它们很好地解决了这类问题

下面是我从中选取的一个代码示例:

有一个非常好的正则表达式匹配器,它还解释了各种元素将匹配什么。是所有模式的列表

对于第一个问题,您可以使用以下表达式

C:*groovy

以匹配文件路径的字符串

第二个是这样工作的

(?<=groovy:\s).*

但是请注意,像这样使用。*有点危险,因为它基本上匹配任何东西。直到下一个空格字符*。尽管如此,如果您的输入看起来总是像您发布的一样,这将起作用。

您可以尝试使用正则表达式-它们很适合解决此类问题

下面是我从中选取的一个代码示例:

有一个非常好的正则表达式匹配器,它还解释了各种元素将匹配什么。是所有模式的列表

对于第一个问题,您可以使用以下表达式

C:*groovy

以匹配文件路径的字符串

第二个是这样工作的

(?<=groovy:\s).*
但是请注意,像这样使用。*有点危险,因为它基本上匹配任何东西。直到下一个空格字符*。尽管如此,如果你的输入看起来总是像你发布的一样,这将起作用