Java 查找以某个单词开头和结尾的子字符串
我试图使用groovy或java从文本文件的每一行提取子字符串。我正在努力寻找一种有效的方法来处理长字符串,其中包含我感兴趣的子字符串。假设我有以下字符串:Java 查找以某个单词开头和结尾的子字符串,java,groovy,substring,Java,Groovy,Substring,我试图使用groovy或java从文本文件的每一行提取子字符串。我正在努力寻找一种有效的方法来处理长字符串,其中包含我感兴趣的子字符串。假设我有以下字符串: String lineNew = "Error in file C:/Desktop/calc.groovy: assert "A1" == "A2"" 现在我想从这个字符串中提取两条信息:首先,我想获取文件名,它总是以C://开头,以.groovy结尾。 其次,我想得到错误,它
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).*
但是请注意,像这样使用。*有点危险,因为它基本上匹配任何东西。直到下一个空格字符*。尽管如此,如果你的输入看起来总是像你发布的一样,这将起作用