PHP의 join()과 같은 어레이의 Java 함수?
가입하고 싶다String[]
끈으로 묶어서.이거 기능 있어요?
Java8부터 사용할 수 있습니다.String.join()
.
String.join(", ", new String[]{"Hello", "World", "!"})
생성:
Hello, World, !
그렇지 않으면 Apache Commons Lang은 함께 어레이를 결합하는 기능을 가진 클래스를 가지고 있습니다.String
.
예를 들어 다음과 같습니다.
StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")
다음을 생성합니다.String
:
Hello, World, !
Android에서 사용할 항목을 찾고 있다면 다음과 같습니다.
String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)
예를 들어 다음과 같습니다.
String joined = TextUtils.join(";", MyStringArray);
Java 8에서는
1) 스트림 API:
String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));
2) 새로운 String.가입방법 : https://stackoverflow.com/a/21756398/466677
3) java.displaces.String Joiner 클래스: http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html
이러한 함수는 약 10줄의 코드로 쉽게 작성할 수 있습니다.
String combine(String[] s, String glue)
{
int k = s.length;
if ( k == 0 )
{
return null;
}
StringBuilder out = new StringBuilder();
out.append( s[0] );
for ( int x=1; x < k; ++x )
{
out.append(glue).append(s[x]);
}
return out.toString();
}
substring() 대신 약간의 mod를 사용합니다.
//join(String array,delimiter)
public static String join(String r[],String d)
{
if (r.length == 0) return "";
StringBuilder sb = new StringBuilder();
int i;
for(i=0;i<r.length-1;i++){
sb.append(r[i]);
sb.append(d);
}
sb.append(r[i]);
return sb.toString();
}
최근의 많은 질문들과 마찬가지로 Java 8은 다음과 같이 구조합니다.
Java 8은 새로운 정적 메서드를 추가했습니다.java.lang.String
원하는 대로 할 수 있습니다.
public static String join(CharSequence delimeter, CharSequence... elements);
사용방법:
String s = String.join(", ", new String[] {"Hello", "World", "!"});
결과:
"Hello, World, !"
구글 구아바의 라이브러리에도 이런 기능이 있다.String [ ]의 예는 API에서도 확인할 수 있습니다.
api에서 이미 설명한 바와 같이 빌더 메서드의 불변성에 주의하십시오.
다양한 오브젝트를 수용할 수 있기 때문에, 고객님의 경우에 유효합니다.이전 경험에서 저는 반복 가능한 스택에 가입해 보았고, 정상적으로 작동합니다.
샘플:
Deque<String> nameStack = new ArrayDeque<>();
nameStack.push("a coder");
nameStack.push("i am");
System.out.println("|" + Joiner.on(' ').skipNulls().join(nameStack) + "|");
출력:|i am a coder|
지정:
String[] a = new String[] { "Hello", "World", "!" };
그리고 coubird의 대답 대신 접착제가 ", ":
Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")
또는 " & "와 같은 다른 문자열과 연결합니다.
Arrays.asList(a).toString().replaceAll(", ", " & ").replaceAll("^\\[|\\]$", "")
하지만...이 값은 배열 또는 목록의 값에 문자열 " , " 가 포함되지 않은 경우에만 작동합니다.
Spring Framework를 사용하는 경우 String Utils 클래스가 있습니다.
import static org.springframework.util.StringUtils.arrayToDelimitedString;
arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");
핵심이 아니야, 아니야.다만, 「Java array join string glue」를 검색하면, 이것을 실현하는 방법에 관한 코드 스니펫이 표시됩니다.
예.
public static String join(Collection s, String delimiter) {
StringBuffer buffer = new StringBuffer();
Iterator iter = s.iterator();
while (iter.hasNext()) {
buffer.append(iter.next());
if (iter.hasNext()) {
buffer.append(delimiter);
}
}
return buffer.toString();
}
어레이에서 문자열로 빠르게 변환하고 싶다면 Arrays.toString()을 사용해 보십시오.
의 문자열 표현을 만듭니다.
Object[]
통과된.결과는 괄호로 둘러싸여 있습니다."[]"
각 요소는 를 통해 String으로 변환됩니다.String.valueOf(Object)
에 의해 분리되다", "
어레이가null
,그리고나서"null"
이 반환됩니다.
"나는 가장 짧은 것이 있다"는 도전만을 위해, 여기 내 것이 있다.
반복:
public static String join(String s, Object... a) {
StringBuilder o = new StringBuilder();
for (Iterator<Object> i = Arrays.asList(a).iterator(); i.hasNext();)
o.append(i.next()).append(i.hasNext() ? s : "");
return o.toString();
}
재귀:
public static String join(String s, Object... a) {
return a.length == 0 ? "" : a[0] + (a.length == 1 ? "" : s + join(s, Arrays.copyOfRange(a, 1, a.length)));
}
제가 아는 바로는 아무 것도 없어요.
Apache Commons Lang에는 여러 join 함수를 포함하는 클래스가 있습니다.
이렇게 하는 거예요.
private String join(String[] input, String delimiter)
{
StringBuilder sb = new StringBuilder();
for(String value : input)
{
sb.append(value);
sb.append(delimiter);
}
int length = sb.length();
if(length > 0)
{
// Remove the extra delimiter
sb.setLength(length - delimiter.length());
}
return sb.toString();
}
유사한 대안
/**
* @param delimiter
* @param inStr
* @return String
*/
public static String join(String delimiter, String... inStr)
{
StringBuilder sb = new StringBuilder();
if (inStr.length > 0)
{
sb.append(inStr[0]);
for (int i = 1; i < inStr.length; i++)
{
sb.append(delimiter);
sb.append(inStr[i]);
}
}
return sb.toString();
}
내 생각.
public static String join(Object[] objects, String delimiter) {
if (objects.length == 0) {
return "";
}
int capacityGuess = (objects.length * objects[0].toString().length())
+ ((objects.length - 1) * delimiter.length());
StringBuilder ret = new StringBuilder(capacityGuess);
ret.append(objects[0]);
for (int i = 1; i < objects.length; i++) {
ret.append(delimiter);
ret.append(objects[i]);
}
return ret.toString();
}
public static String join(Object... objects) {
return join(objects, "");
}
String 클래스의 메서드만 사용하는 3행 방식이 마음에 드십니까?
static String join(String glue, String[] array) {
String line = "";
for (String s : array) line += s + glue;
return (array.length == 0) ? line : line.substring(0, line.length() - glue.length());
}
"str1", "str2", ""에서 "str1, str2"를 얻으려면:
Stream.of("str1", "str2", "").filter(str -> !str.isEmpty()).collect(Collectors.joining(", "));
또한 null-check를 추가할 수 있습니다.
기능 Java 라이브러리를 사용하고 있는데 어떤 이유로 Java 8에서 Streams를 사용할 수 없는 경우(Android + Retrolambda 플러그인을 사용하는 경우일 수 있음), 다음과 같은 기능 솔루션이 있습니다.
String joinWithSeparator(List<String> items, String separator) {
return items
.bind(id -> list(separator, id))
.drop(1)
.foldLeft(
(result, item) -> result + item,
""
);
}
가장 효율적인 방법은 아니지만 소규모 목록에 적합합니다.
어떤 방법을 선택하든 배열 내의 null 값에 주의하십시오.문자열 표현은 "null"이므로 원하는 동작이 아닌 경우 null 요소를 건너뜁니다.
String[] parts = {"Hello", "World", null, "!"};
Stream.of(parts)
.filter(Objects::nonNull)
.collect(Collectors.joining(" "));
String Builder를 사용하여 다음과 같이 수행합니다.
public static String join(String[] source, String delimiter) {
if ((null == source) || (source.length < 1)) {
return "";
}
StringBuilder stringbuilder = new StringBuilder();
for (String s : source) {
stringbuilder.append(s + delimiter);
}
return stringbuilder.toString();
} // join((String[], String)
제가 주로 사용하는 간단한 속기법이 있습니다.
String op = new String;
for (int i : is)
{
op += candidatesArr[i-1]+",";
}
op = op.substring(0, op.length()-1);
java.displaces를 클릭합니다.어레이에는 'asList' 메서드가 있습니다.java.util과 함께.List/ArrayList API를 통해 필요한 모든 것을 얻을 수 있습니다.
private static String[] join(String[] array1, String[] array2) {
List<String> list = new ArrayList<String>(Arrays.asList(array1));
list.addAll(Arrays.asList(array2));
return list.toArray(new String[0]);
}
언급URL : https://stackoverflow.com/questions/1515437/java-function-for-arrays-like-phps-join
'programing' 카테고리의 다른 글
반사란 무엇이며 왜 유용한가? (0) | 2022.08.25 |
---|---|
fread는 실제로 어떻게 작동합니까? (0) | 2022.08.25 |
vue-tables-2의 데이터 새로고침(Vuex) (0) | 2022.08.25 |
C의 롤링 중위수 알고리즘 (0) | 2022.08.25 |
@vue/cli-plugin-unit-mocha, TypeScript 및 SFC를 사용한 VueJ 프로젝트의 NYC 커버리지 보고서 생성 (0) | 2022.08.25 |