假设我有一个像这样的字符串:
“(...)示例:Hello world。描述:这是一个长文本,带有单词和 ponctuation。这是我需要的部分。这部分我不需要:结束 这个例子。 (...)“
我如何才能获得此子字符串:
这是一个长文本,带有单词和ponctuation。这是我需要的部分。
我写的(...)是字符串的延续,我正在处理一个长文本,但在这种情况下只想得到描述。
我希望“描述:”和下一个“:”之前的单词之间的所有内容(单词,小点,逗号等)
确切示例:
职位名称:Java程序员日期:18/04/2014数量:4职位空缺职位描述:在软件工厂下实施系统,使用Agile,Spring,Hibernate和GWT。计算机科学高等教育。 TDD课程。熟悉敏捷方法,描述活动,TDD和BDD。有良好的沟通。备注:福利:医疗保健/医疗集团,门票,交通代金券计划招聘:CLT(常设)营业时间:周一至周五上午8点至17点30分,午餐时间为1小时30分。
我需要:
在软件工厂下实施系统,使用Agile,Spring,Hibernate和GWT。计算机科学高等教育。 TDD课程。熟悉敏捷方法,描述活动,TDD和BDD。沟通良好。
“Description:”之后的子字符串和“Note:”之前的子字符串,但是这个第二个字(Note :)可以是任何单词。这就是为什么我需要一个正则表达式,但不知道它是什么。
答案 0 :(得分:3)
String original = "This is a string: Here is what you want: Maybe you want this too?";
int firstColon = original.indexOf(':');
int secondColon = original.indexOf(':', firstColon+1);
if (secondColon != -1) {
String parsed = original.substring(firstColon+1, secondColon);
} else {
//2 colons not found
}
上面的代码找到:
字符的第一个索引并存储它。然后它会在原始文件之后找到下一个:
。如果找到第二个冒号(if
语句),则解析并存储该字符串。 String.substring
包含第一个索引,不包括最后一个索引。要修剪任何前导或尾随空格,请将.trim()
添加到已解析行的末尾。要仅扫描第一个冒号,请使用以下命令。 (这会修剪字符串)
String original = "This is a string: Here is what you want: Maybe you want this too?";
int firstColon = original.indexOf(':');
if (firstColon != -1) {
String parsed = original.substring(firstColon+1).trim();
} else {
//One colon not found
}
需要注意的是java中的字符串是不可变的。 original.substring不会更改原始内容,只返回子字符串字符的新String。
答案 1 :(得分:0)
您可以使用split方法,如下所示:
String[] sentences = "This is a : test".split("[:]");
传递给split方法的参数是一个正则表达式,并返回每个分区的字符串数组。
例如,上面显示的方法将返回以下输出:
sentences[0] will be This is a"
sentences[1] will " test"
答案 2 :(得分:0)
如果您正在使用(< =)jdk1.6 ,并且正如您所说的文字可能长,我将不会使用{{1} },以避免潜在的内存问题。
正则表达式可以直接在两个substring()
:
与群组::
没有小组::([^:]*):