将一组单词和一个空格组合在一起,但之前或之后没有空格的简单/有效方法是什么?
我想在循环中组合所有内容后可以删除空格(类似于sum + =(term +“”))......但我不喜欢它。
最好使用Java,Python或Ruby编写代码。
答案 0 :(得分:13)
嗯,在Python中,使用 join :
会很简单values = ["this", "is", "your", "array"]
result = " ".join(values)
答案 1 :(得分:7)
是的,这就是join
的用途。这是Ruby版本:
["word", "another", "word"].join(" ")
<flamebait>
正如您所看到的,Ruby在join
而不是Array
上使String
成为一种方法,因此更为明智。 </flamebait>
答案 2 :(得分:1)
你想要的是String.Join,但是因为只是说这可能对你没有帮助,这里有一些Join implementations in Java。这是一个string utility,它有一个Java连接。
答案 3 :(得分:1)
直接来自我现有的一个utilz类
<强> C:\ java的\家\ SRC \ KRC \ utilz \ Arrayz.java 强>
package krc.utilz;
/**
* A bunch of static helper methods for arrays of String's.
* @See also krc.utilz.IntArrays for arrays of int's.
*/
public abstract class Arrayz
{
/**
* Concetenates the values in the given array into a string, seperated by FS.
* @param FS String - Field Seperator - Name borrowed from awk
* @param Object[] a - array to be concatentated
* @return a string representation of the given array.
*/
public static String join(String FS, Object[] a) {
if (a==null||a.length==0) return "";
StringBuilder result = new StringBuilder(String.valueOf(a[0]));
for(int i=1; i<a.length; i++) {
result.append(FS);
result.append(String.valueOf(a[i]));
}
return result.toString();
}
....
}
干杯。基思。
修改强>
这是一个快速的&amp;脏的性能比较,使用java.util.Arrays作为基线。
请注意,热点成本在100次迭代中摊销,并且对于所有三种技术应该(或多或少)相同... krc.utilz.RandomString和krc.utilz.Arrayz都可以根据要求提供,只需询问。
package forums;
import java.util.Arrays;
import krc.utilz.Arrayz;
import krc.utilz.RandomString;
class ArrayToStringPerformanceTest
{
private static final int NS2MS = 1000000; // 1 millisecond (1/10^3) = 1,000,000 nanoseconds (1/10^9)
public static void main(String[] args) {
try {
String[] array = randomStrings(100*1000, 16);
long start, stop;
String result;
final int TIMES = 100;
long time1=0L, time2=0L, time3=0L;
for (int i=0; i<TIMES; i++) {
start = System.nanoTime();
result = Arrays.toString(array);
stop = System.nanoTime();
//System.out.println("Arrays.toString took "+(stop-start)+" ns");
time1 += (stop-start);
start = System.nanoTime();
result = Arrayz.join(", ", array);
stop = System.nanoTime();
//System.out.println("Arrayz.join took "+(stop-start)+" ns");
time2 += (stop-start);
start = System.nanoTime();
result = arrayToString(array, ", ");
stop = System.nanoTime();
//System.out.println("arrayToString took "+(stop-start)+" ns");
time3 += (stop-start);
}
System.out.format("java.util.Arrays.toString took "+(time1/TIMES/NS2MS)+" ms");
System.out.format("krc.utilz.Arrayz.join took "+(time2/TIMES/NS2MS)+" ms");
System.out.format("arrayToString took "+(time3/TIMES/NS2MS)+" ms");
} catch (Exception e) {
e.printStackTrace();
}
}
public static String arrayToString(String[] array, String spacer) {
StringBuffer result = new StringBuffer();
for ( int i=0; i<array.length; i++ ) {
result.append( array[i] + ((i+1<array.length)?spacer:"") );
}
return result.toString();
}
private static String[] randomStrings(int howMany, int length) {
RandomString random = new RandomString();
String[] a = new String[howMany];
for ( int i=0; i<howMany; i++) {
a[i] = random.nextString(length);
}
return a;
}
}
/*
C:\Java\home\src\forums>"C:\Program Files\Java\jdk1.6.0_12\bin\java.exe" -Xms512m -Xmx1536m -enableassertions -cp C:\Java\home\classes forums.ArrayToStringPerformanceTest
java.util.Arrays.toString took 26 ms
krc.utilz.Arrayz.join took 32 ms
arrayToString took 59 ms
*/
另见Doomspork的建议,以及我对此的评论。
干杯。基思。
答案 4 :(得分:1)
Java可以通过以下方式完成:
public static String arrayToString(String[] array, String spacer) {
StringBuffer result = new StringBuffer();
for(int i = 0 ; i < array.length ; i++) {
result.append(array[i] + ((i + 1 < array.length) ? spacer : ""));
}
return result.toString();
}
答案 5 :(得分:1)
这也适用于Ruby:
['a', 'list', 'of', 'words'] * " "
答案 6 :(得分:0)
嗯,我知道Python有这样的函数,我假设Ruby和Java一样。
join函数接受一个字符串数组(取决于语言,它可以是其他类型),并将它们与您选择的字符(或其他字符串)连接在一起。
Python代码:
wordString = " ".join(["word", "another", "word"])
否则,您可以循环遍历数组,添加单词和空格,并测试它是否是最后一个元素。如果是,只需添加单词,而不是空格。
再次使用Python代码:(感谢PTBNL的建议)
wordArray = ["word", "another", "word"]
wordString = ""
for i in range(0, len(wordArray) - 1):
wordString += wordArray[i] + " "
wordString += wordArray[len(wordArray) - 1]
答案 7 :(得分:0)
在Python中,你要求连接字符串到join一个可迭代的字符串:
alist= ["array", "of", "strings"]
output= " ".join(alist)
如果这种符号对你来说很奇怪,你可以用不同的语法做同样的事情:
output= str.join(" ", alist)
这适用于任何可迭代的(列表,元组,字典,生成器,生成器表达式......),只要这些项都是字符串(或unicode字符串)。
如果您想获得unicode结果,可以将unicode
替换为str
(或u' '
替换' '
)。
答案 8 :(得分:-3)
让我们不要忘记好老式的
for s in strArray do
print s
print " "