我的数据格式可靠:
1. New York Times - USA
2. Guardian - UK
3. Le Monde - France
我正在使用此代码来解析newspaper
和country
值:
String newspaper = "";
String country = "";
int hyphenIndex = unparsedText.indexOf("-");
if (hyphenIndex > -1)
{
newspaper = unparsedText.substring(0, hyphenIndex);
}
country = unparsedText.substring(hyphenIndex + 1, unparsedText.length());
country = country.trim();
但这会产生以下的报纸价值:
1. New York Times
2. Guardian
3. Le Monde
最简单的改变是什么才能最终得到报纸的价值:
New York Times
Guardian
Le Monde
答案 0 :(得分:4)
这是一个基于正则表达式的解决方案:
input.replaceAll("(?m)^\\d+\\.\\s*|\\s*-\\s*.*?$", "");
正则表达式适用于多行模式(?m)
并删除:
我假设报纸名称中没有连字符。
答案 1 :(得分:2)
当然只是找到第一个“。”的索引。并使用substring(from,to)
将位置放在中间位置。
类似的东西:
String newspaper = "";
String country = "";
int hyphenIndex = unparsedText.indexOf("-");
int dotIndex = unparsedText.indexOf(".");
if (hyphenIndex > -1)
{
newspaper = unparsedText.substring(dotIndex + 1, hyphenIndex);
}
country = unparsedText.substring(hyphenIndex + 1, unparsedText.length());
country = country.trim();
答案 2 :(得分:1)
如果该格式确实可靠,那么最简单(也可能是最有效)的方法似乎是找到.
字符的第一个实例,然后从dotIndex + 1
开始获取子字符串。实际上,您可以将它与当前的子字符串操作(基于破折号的位置)结合起来,一次性提取报纸名称。
如果格式的可靠性稍差,您可以使用正则表达式匹配数字后跟分隔符后跟空格,然后删除它。但在这种情况下,这似乎有点矫枉过正。
答案 3 :(得分:1)
如果所有条目都遵循您提供的格式,您可以在数字之后查找完整的句点,例如
int dotIndex = unparsedText.indexOf(".");
然后
newspaper = unparsedText.substring(dotIndex + 2, hyphenIndex - 1);
注意:您要在.
之后开始2个字符,并在-
之前排除1个空格或使用trim()
答案 4 :(得分:1)
java.util.regex.Matcher m = (new java.util.regex.Pattern("[a-zA-Z ]*")).matcher(unparsedText);
m.find();
System.err.println(unparsedText.substring(m.start(), m.end());
答案 5 :(得分:1)
.
和-
上分开,则String#split(String regex)会有效。
[0] => "1"
[1] => " New York Times "
[2] => " USA"
然后只修剪你想要的结果。
答案 6 :(得分:1)
这个正则表达式应该有效:
Pattern pattern = Pattern.compile("\\d+.\\s(.*)\\s-.*");
Matcher matcher = pattern.matcher("1. New Your Times - USA");
String newspaper = matcher.toMatchResult().group(1);
Assert.assertEquals("New Your Times", newspaper);
答案 7 :(得分:1)
我会这样做:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Application
{
public static void main ( final String[] args )
{
final String[] lines = new String[] { "1. New York Times - USA", "2. Guardian - UK", "3. Le Monde - France" };
final Pattern p = Pattern.compile ( "\\.\\s+(.*?)\\s+-\\s+(.*)" );
for ( final String unparsedText : lines )
{
String newspaper;
String country;
final Matcher m = p.matcher ( unparsedText );
if ( m.find () )
{
newspaper = m.group ( 1 );
country = m.group ( 2 );
System.out.println ( "Newspaper: " + newspaper + " Country: " + country );
}
}
}
}