Java-一次性拆分和修剪

Java-一次性拆分和修剪,java,string,split,Java,String,Split,我有这样一个字符串:String attributes=“foo-boo,faa-baa,fii-bii,”我想得到这样的结果: String[] result = {"foo boo", "faa baa", "fii bii"}; 因此,我的问题是如何在我已经分割的一次拍摄中进行分割和修剪: String[] result = attributes.split(","); 但是空格仍在结果中: String[] result = {" foo boo", " faa baa", " fi

我有这样一个字符串:
String attributes=“foo-boo,faa-baa,fii-bii,”
我想得到这样的结果:

String[] result = {"foo boo", "faa baa", "fii bii"};
因此,我的问题是如何在我已经分割的一次拍摄中进行分割和修剪:

String[] result = attributes.split(",");
但是
空格
仍在结果中:

String[] result = {" foo boo", " faa baa", " fii bii"};
                    ^           ^           ^

我知道我们可以为每个人做一个循环和修剪,但我想在快照中做到。

用逗号和空格拆分怎么样:

String result[] = attributes.split(",\\s");

使用正则表达式
\s*,\s*
进行拆分

String result[] = attributes.split("\\s*,\\s*");

用于初始和尾随空格
前面的解决方案仍然保留初始和后续空白。因此,如果我们期待其中任何一个,那么我们可以使用以下解决方案删除相同的内容:

String result[] = attributes.trim().split("\\s*,\\s*");

使用Java8,您可以在一行中完成这样的操作

String[] result = Arrays.stream(attributes.split(",")).map(String::trim).toArray(String[]::new);

如果逗号之间没有文本,以下表达式将不会创建空元素:

String result[] = attributes.trim().split("\\s*,+\\s*,*\\s*");

先前发布于此处:

创建您自己的自定义函数

private static String[] split_and_trim_in_one_shot(String string){
 String[] result  = string.split(",");
 int array_length = result.length;

 for(int i =0; i < array_length ; i++){
  result[i]=result[i].trim();
 }
 return result;
private static String[]split\u和trim\u在一个镜头中(String String){
String[]result=String.split(“,”);
int数组_length=result.length;
for(int i=0;i
重载并考虑自定义分隔符

private static String[] split_and_trim_in_one_shot(String string, String delimiter){
 String[] result  = string.split(delimiter);
 int array_length = result.length;

 for(int i =0; i < array_length ; i++){
  result[i]=result[i].trim();
 }
 return result;
private static String[]split\u和trim\u在一个快照中(字符串、字符串分隔符){
String[]result=String.split(分隔符);
int数组_length=result.length;
for(int i=0;i
//给定输入
字符串属性=“foo-boo、faa-baa、fii-bii”;
//期望输出
字符串[]结果={“foo-boo”、“faa-baa”、“fii-bii”};
这应该起作用:

String[]s=attributes.trim().split(“[,]”);
正如@Raman Sahasi所回答的:

在分割字符串之前,可以修剪尾随空格和前导空格。我使用了分隔符
,因为它是字符串中唯一的分隔符

最好的办法是:

value.split(",").map(function(x) {return x.trim()});


您也可以在
,\\s
上拆分,并删除
字符串中的最后一个
,KevinEsche请记住第一个条目中的前导空格。这也必须进行修剪。我认为,在“两个快照”中执行此操作这将是最干净的编码方式,不需要付出太多的努力。我真的不认为把它复杂化有什么意义。我支持Silverclaw。我认为这是过早的优化。只要分两步进行,就不会导致性能问题,分两步进行。我想这不值得努力。可能重复:这仍然需要特别处理第一个和最后一个条目的排序。这不是问题,只是说说而已。所以这也不是一次真正的“一次性”操作。这会在开始时返回一个类似于空格的结果,并且,在结束时,`foo boo faa baa fii bii,`@YCF_L,这仍然会降低您修剪结果[0]并从结果[result.length-1]中删除“,”的努力而不是触摸每个元素。这不是一次尝试!我猜你只是在为一个循环编写line@SASIKUMARS取决于你对“一枪”的定义。如果等于“一条线”,那就完全可以了。@SASIKUMARS我不同意。我也是,我把它解释为“一步到位”但这并不意味着其他解释是无效的。我并不是说它是无效的。这不是最好的解决方案…但它是一个很好的解决方案,尽管如此@Fildor@MikhailBatcer
String[]::new
部分基本上是一个函数,它生成所需类型和提供长度的新数组
使用上述指定函数返回包含流元素的数组。但它仍然不属于单次快照!!!!@YCF\u L因为trim是第一次快照,split是第二次快照!!!@SASIKUMAR没有trim它永远无法工作()。因为split只会分割字符串,而不会改变分割。@SASIKUMARS我认为这是更好的解决方案,到目前为止,也许我们可以等一个更好的解决方案?好吧,我想这是在不编写自己的解析器的情况下可以得到的最接近的解决方案。它只需要1次修剪而不是n次修剪。@RodrigoR.Coelho
\\s
本身就可以覆盖所有space字符。因此,在您的情况下,您可以使用
attributes.trim().split(\\s*);
很好的尝试。
⠀⠀⠀
nope!它保留了faa和fii的前导空格!!!使用grovy和尾随星号操作符将对每个元素应用任何尾随操作:attributes.split(“[,]”)*.trim()(希望注释中的小格式代码仍然可以读取)
value.split(",").map(function(x) {return x.trim()});