Java中对应PHP的implode(',' , array_filter( array () ))的方法是什么?
Java中对应PHP的implode(',' , array_filter( array () ))的方法是什么?
我经常在PHP中使用这段代码:
$ordine['address'] = implode(', ', array_filter(array($cliente['cap'], $cliente['citta'], $cliente['provincia'])));
它会清除空字符串并用逗号将它们连接起来。如果只剩下一个字符串,它不会添加额外的不必要逗号。它不会在末尾添加逗号。如果没有剩下任何字符串,它会返回空字符串。
因此,我可以得到以下结果之一:
"" "街道abc 14" "街道abc 14, 00168" "街道abc 14, 00168, 罗马"
在没有添加外部库的情况下(针对Android设计),最好的Java实现是什么(代码越少越好)?
Java中没有直接对应于PHP的implode(',' , array_filter( array () ))函数的等价方法。该PHP函数的作用是将一个数组中的元素连接成一个字符串,并且只保留非空元素。
在Java中,可以通过使用StringJoiner类来实现类似的功能。该类在Java 8中引入,可以将一系列字符串连接成一个字符串,并且可以指定连接符。
下面是使用StringJoiner类实现类似PHP函数的示例代码:
import java.util.Arrays; import java.util.StringJoiner; public class Main { public static void main(String[] args) { String[] array = {"Red", "", "Green", "Blue"}; StringJoiner joiner = new StringJoiner(","); for (String element : array) { if (!element.isEmpty()) { joiner.add(element); } } String result = joiner.toString(); System.out.println(result); // Output => Red,Green,Blue } }
在上面的示例代码中,我们首先创建了一个StringJoiner对象,并指定了连接符为逗号。然后,遍历数组中的元素,如果元素不为空,就将其添加到StringJoiner中。最后,调用toString()方法获取连接后的字符串。
通过使用StringJoiner类,我们可以实现类似PHP函数的功能,并且只保留非空元素。
Java中实现PHP的implode(',', array_filter(array()))的问题出现的原因是因为Java中没有直接等价的方法来实现这一功能。在PHP中,implode是将数组元素连接成一个字符串,array_filter是过滤数组中的元素。而在Java中,没有直接的方法来同时实现这两个功能。
解决这个问题的方法有两种。首先是使用Java 8的新特性,使用String.join或String.joining方法来实现连接字符串的功能。这些方法可以接受一个分隔符和一个元素列表,将元素连接成一个字符串。如果不需要过滤元素,可以直接使用这些方法。
第二种方法是使用Java 8的新特性中的Stream流来实现。可以使用filter方法来过滤数组中的元素,然后使用Collectors.joining方法来连接过滤后的元素。
下面是使用Java 8的新特性重新实现的代码:
private static final PredicateIS_NOT_SPACES_ONLY = Pattern.compile("^\\s*$").asPredicate().negate(); public static String implode(String delimiter, String... data) { return Arrays.stream(data) .filter(IS_NOT_SPACES_ONLY) .collect(Collectors.joining(delimiter)); }
这段代码使用了Stream流来过滤数组中的元素,将非空格字符的元素连接成一个字符串。
另外,之前的代码是在Java 8之前的版本中实现的。它使用StringBuilder来连接字符串,并使用正则表达式来判断是否是空字符串。这种方法在Java 8中已经过时,不推荐使用。
可以通过使用Java 8的新特性来实现类似于PHP中implode和array_filter的功能。使用String.join或String.joining方法来连接字符串,或者使用Stream流来过滤和连接数组元素。
PHP的implode(',' , array_filter( array () ))函数在Java中没有直接对应的方法。所以,我们需要找到一个解决方案来实现相同的功能。
一种解决方案是使用Java的String.join()方法。这个方法可以将一个字符串数组连接起来,并用指定的分隔符分隔。但是,这个方法不能过滤空元素。为了实现类似于array_filter()的功能,我们可以使用Java 8引入的流(Stream)来过滤空字符串。
下面是使用Java的String.join()和流(Stream)来实现相同功能的代码:
String[] array = { "Hello", "", "World", "!" }; String result = String.join(", ", Arrays.stream(array).filter(s -> !s.isEmpty()).toArray(String[]::new)); System.out.println(result);
这段代码首先定义了一个字符串数组array,其中包含了一些元素。然后,我们使用Arrays.stream()方法将数组转换为流。接下来,我们使用filter()方法过滤掉空字符串。最后,我们使用String.join()方法将过滤后的字符串数组连接起来,并使用逗号和空格作为分隔符。
通过这种方式,我们可以实现类似于PHP的implode(',' , array_filter( array () ))函数的功能。