获取双引号内的字符串以及字符串的其余部分
Get string within double quotes along with rest of the string
我有一种情况需要在一个变量中提取双引号内的字符串,在另一个变量中提取字符串的其余部分。
两种可能性:
字符串: "Franklin B" Benjamin
结果:
var1 = Franklin B
var2 = Benjamin
字符串: Benjamin "Franklin B"
结果:
var1 = Benjamin
var2 = Franklin B
Regex/Without 正则表达式;我对任何方法都持开放态度。
一个简单的非正则表达式方法:
public static String[] split(String input) {
if (input.charAt(0) == '"') {
return input.substring(1).split("\" ");
} else {
return input.substring(0, input.length() - 1).split(" \"");
}
}
首先检查第一个字符是否为"
。然后从开头或结尾删除引号并简单地将其拆分。
以下将为您提供包含所需值的列表:
private List<String> getValues(String input) {
List<String> matchList = new ArrayList<>();
Pattern regex = Pattern.compile("[^\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(input);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
return matchList;
}
取自Regex for splitting a string using space when not surrounded by single or double quotes
试试这个...
基本上,您在执行拆分之前删除字符串中的任何前导分隔符。这样您就不必担心前导空元素。
public static void main(String[] args) {
String testString = "\"Franklin B\" Benjamin";
String testString2 = "Benjamin \"Franklin B\"";
displaySplitResults(mySplit(testString, "\""));
displaySplitResults(mySplit(testString2, "\""));
}
private static String[] mySplit(final String input, final String delim)
{
return input.replaceFirst("^" + delim, "").split(delim);
}
private static void displaySplitResults(String[] splitResults) {
if (splitResults.length == 2) {
String var1 = splitResults[0].trim();
String var2 = splitResults[1].trim();
System.out.println(var1);
System.out.println(var2);
}
}
结果:
Franklin B
Benjamin
Benjamin
Franklin B
@Shar1er80 没有正则表达式的好作品。效果很好。
我也尝试过正则表达式:
//使用正则表达式获取由空格分隔但用双引号引起来的值
RegexOptions options = RegexOptions.None;
Regex regex = new Regex( @"((""((?<token>.*?)(?<!\)"")|(?<token>[\w]+))(\s)*)", options );
string input = @" Here is ""my string"" it has "" six matches"" ";
var result = (from Match m in regex.Matches( input )
where m.Groups[ "token" ].Success
select m.Groups[ "token" ].Value).ToList();
给我确切的结果。
我有一种情况需要在一个变量中提取双引号内的字符串,在另一个变量中提取字符串的其余部分。
两种可能性:
字符串: "Franklin B" Benjamin
结果:
var1 = Franklin B
var2 = Benjamin
字符串: Benjamin "Franklin B"
结果:
var1 = Benjamin
var2 = Franklin B
Regex/Without 正则表达式;我对任何方法都持开放态度。
一个简单的非正则表达式方法:
public static String[] split(String input) {
if (input.charAt(0) == '"') {
return input.substring(1).split("\" ");
} else {
return input.substring(0, input.length() - 1).split(" \"");
}
}
首先检查第一个字符是否为"
。然后从开头或结尾删除引号并简单地将其拆分。
以下将为您提供包含所需值的列表:
private List<String> getValues(String input) {
List<String> matchList = new ArrayList<>();
Pattern regex = Pattern.compile("[^\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(input);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
return matchList;
}
取自Regex for splitting a string using space when not surrounded by single or double quotes
试试这个...
基本上,您在执行拆分之前删除字符串中的任何前导分隔符。这样您就不必担心前导空元素。
public static void main(String[] args) {
String testString = "\"Franklin B\" Benjamin";
String testString2 = "Benjamin \"Franklin B\"";
displaySplitResults(mySplit(testString, "\""));
displaySplitResults(mySplit(testString2, "\""));
}
private static String[] mySplit(final String input, final String delim)
{
return input.replaceFirst("^" + delim, "").split(delim);
}
private static void displaySplitResults(String[] splitResults) {
if (splitResults.length == 2) {
String var1 = splitResults[0].trim();
String var2 = splitResults[1].trim();
System.out.println(var1);
System.out.println(var2);
}
}
结果:
Franklin B
Benjamin
Benjamin
Franklin B
@Shar1er80 没有正则表达式的好作品。效果很好。
我也尝试过正则表达式:
//使用正则表达式获取由空格分隔但用双引号引起来的值
RegexOptions options = RegexOptions.None;
Regex regex = new Regex( @"((""((?<token>.*?)(?<!\)"")|(?<token>[\w]+))(\s)*)", options );
string input = @" Here is ""my string"" it has "" six matches"" ";
var result = (from Match m in regex.Matches( input )
where m.Groups[ "token" ].Success
select m.Groups[ "token" ].Value).ToList();
给我确切的结果。