如何在java中查找行的结束索引
我想开始和结束以下文本索引 这里的起始词是固定的,但结束词是不固定的。结束词是到行尾 行是:如何在java中查找行的结束索引,java,Java,我想开始和结束以下文本索引 这里的起始词是固定的,但结束词是不固定的。结束词是到行尾 行是: Cardiovascular:ROS:Neurological: Cardiovascular:ROS:XYZ: Cardiovascular:ROS:ABC::: 我可以找到起始索引,但如何找到结束索引..因为它不是固定的。如果将该行存储为字符串,则yourString.indexOf(yourString.substring(yourString.length-1))如果您使用正则表达式匹配器,它
Cardiovascular:ROS:Neurological:
Cardiovascular:ROS:XYZ:
Cardiovascular:ROS:ABC:::
我可以找到起始索引,但如何找到结束索引..因为它不是固定的。如果将该行存储为
字符串,则yourString.indexOf(yourString.substring(yourString.length-1))代码>如果您使用正则表达式匹配器,它将为您提供每个匹配的开始和结束索引
示例代码
// move this to a constant
final Pattern pattern = Pattern.compile(
"\\b # word boundary (start of word) \n" +
"\\w+ # one or more word characters \n" +
"\\b # another word boundary (end of word)", Pattern.COMMENTS);
final String line = "Cardiovascular:ROS:Neurological:";
final Matcher matcher = pattern.matcher(line);
while(matcher.find()){
System.out.println("Found word "+matcher.group()+" at start index: "+matcher.start()+ ", end index: "+matcher.end());
}
import java.util.StringTokenizer;
public class App {
static String in = "Cardiovascular:ROS:Neurological:";
static String in2 = "Cardiovascular:ROS:XYZ:";
static String in3 = "Cardiovascular:ROS:ABC:::";
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer(in2, ":");
if(st.hasMoreTokens()) {
String first = st.nextToken();
for (int i = 0; i < st.countTokens()-1; i++) {
st.nextToken();
}
String last = st.nextToken();
System.out.println(first + " " + last);
System.out.println(in2.indexOf(last));
}
}
}
输出:
在开始索引为0,结束索引为14时找到单词
在起始索引:15,结束索引:18处找到单词ROS
在开始索引:19,结束索引:31时找到单词
如果需要列索引,请每行使用一个匹配器,但如果需要从字符串开头开始的索引,请不要拆分行,而是在整个字符串上运行匹配器。如果需要字符串类型行中最后一个字符的索引,则index=line.length()-1.您可以使用字符串标记器将字符串转换为标记,并在第一个标记中循环,直到到达最后一个标记
代码
// move this to a constant
final Pattern pattern = Pattern.compile(
"\\b # word boundary (start of word) \n" +
"\\w+ # one or more word characters \n" +
"\\b # another word boundary (end of word)", Pattern.COMMENTS);
final String line = "Cardiovascular:ROS:Neurological:";
final Matcher matcher = pattern.matcher(line);
while(matcher.find()){
System.out.println("Found word "+matcher.group()+" at start index: "+matcher.start()+ ", end index: "+matcher.end());
}
import java.util.StringTokenizer;
public class App {
static String in = "Cardiovascular:ROS:Neurological:";
static String in2 = "Cardiovascular:ROS:XYZ:";
static String in3 = "Cardiovascular:ROS:ABC:::";
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer(in2, ":");
if(st.hasMoreTokens()) {
String first = st.nextToken();
for (int i = 0; i < st.countTokens()-1; i++) {
st.nextToken();
}
String last = st.nextToken();
System.out.println(first + " " + last);
System.out.println(in2.indexOf(last));
}
}
}
import java.util.StringTokenizer;
公共类应用程序{
静态字符串in=“心血管:ROS:神经:”;
静态字符串in2=“心血管:ROS:XYZ:”;
静态字符串in3=“心血管:ROS:ABC::”;
公共静态void main(字符串[]args){
StringTokenizer st=新的StringTokenizer(in2,“:”);
如果(st.hasMoreTokens()){
String first=st.nextToken();
对于(int i=0;i
我不确定您想要得到什么,但它是否是之间的最后一个有效字符串:“
每行
String source = "Cardiovascular:ROS:Neurological:" + "\n" +
"Cardiovascular:ROS:XYZ:" + "\n" +
"Cardiovascular:ROS:ABC:::" + "\n" ;
BufferedReader reader = new BufferedReader(new StringReader( source ));
while( true ) {
String line = reader.readLine();
if(line == null) {
break;
}
String[] split = line.split( ":" );
for( int i = split.length; i >= 0; i-- ) {
String part = split[i-1];
if(!part.isEmpty()){
int lineIndex = line.lastIndexOf( part );
int lineOffset = source.lastIndexOf( line );
System.out.println("found: "+part+ " line-index: "+lineIndex+ " text index: "+(lineOffset+lineIndex));
break;
}
}
}
reader.close();
出去
那么,在这三个例子中,你到底需要什么呢?这只是段落的一部分……我有完整的文档,其中有一行包含上面的字符串(不像上面讨论的那样固定)。