我知道这是一个新手问题,但在Java中C#的字符串操作是否相同?
具体来说,我正在谈论String.Format和String.Join.
在Java中用逗号分隔列表最清晰的方法是什么?
我知道几种方法,但我想知道最好的方法是什么("最佳"意味着最清晰和/或最短,而不是最有效.
我有一个列表,我想循环它,打印每个值.我想在每个项目之间打印一个逗号,但不是在最后一个项目之后(也不是在第一个项目之前).
List --> Item ( , Item ) *
List --> ( Item , ) * Item
Run Code Online (Sandbox Code Playgroud)
样品溶液1:
boolean isFirst = true;
for (Item i : list) {
if (isFirst) {
System.out.print(i); // no comma
isFirst = false;
} else {
System.out.print(", "+i); // comma
}
}
Run Code Online (Sandbox Code Playgroud)
示例解决方案2 - 创建子列表:
if (list.size()>0) {
System.out.print(list.get(0)); // no comma
List theRest = list.subList(1, list.size());
for (Item i : theRest) {
System.out.print(", "+i); // comma
}
}
Run Code Online (Sandbox Code Playgroud)
样品溶液3:
Iterator<Item> i = …Run Code Online (Sandbox Code Playgroud) 我想在对象上执行'foreach'时,对最后一个循环迭代做一些不同的事情.我正在使用Ruby,但C#,Java等也是如此.
list = ['A','B','C']
list.each{|i|
puts "Looping: "+i # if not last loop iteration
puts "Last one: "+i # if last loop iteration
}
Run Code Online (Sandbox Code Playgroud)
所需的输出相当于:
Looping: 'A'
Looping: 'B'
Last one: 'C'
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方法是使用代码将代码迁移到for循环'for i in 1..list.length',但for each解决方案感觉更优雅.在循环期间编写特殊情况的最优雅方法是什么?可以用foreach完成吗?
如果我有一个迭代器并且我想检查最后一个值,我该如何检查它?喜欢
private Set<String> saarcCountries = new TreeSet<String>();
Iterator iter = saarcCountries.iterator();
while(iter.hasNext()) {
String name = (String)iter.next();
int countryId = Integer.parseInt(name);
newsOrAnnouncementInsert.add(newsId);
newsOrAnnouncementInsert.add(countryId);
newsOrAnnouncementInsert.add(1); //addby
if (!(last value in iterator))) {
newsOrAnnouncementInsert.add("~!~");//Delimiter for Multiple Detail Records
}//end if
} //end of while
Run Code Online (Sandbox Code Playgroud)
我该如何检查最后一个值.什么应该替换迭代器中的最后一个值?
在审阅时,我有时会遇到这种循环:
i = begin
while ( i != end ) {
// ... do stuff
if ( i == end-1 (the one-but-last element) ) {
... do other stuff
}
increment i
}
Run Code Online (Sandbox Code Playgroud)
然后我问这个问题:你会写这个吗?
i = begin
mid = ( end - begin ) / 2 // (the middle element)
while ( i != end ) {
// ... do stuff
if ( i > mid ) {
... do other stuff
}
increment i
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这超过了编写循环的意图:你循环,因为每个元素都有一些共同点.使用此构造,对于某些元素,您可以执行不同的操作.因此,我总结说,您需要为这些元素单独的循环:
i = begin …Run Code Online (Sandbox Code Playgroud) language-agnostic loops for-loop control-structure while-loop
我从来没有找到一种干净利落的方式来做到以下几点.
假设我有一个列表/数组字符串.
abc
def
ghi
jkl
Run Code Online (Sandbox Code Playgroud)
我想将它们连接成一个由逗号分隔的单个字符串,如下所示:
abc,def,ghi,jkl
Run Code Online (Sandbox Code Playgroud)
在Java中,如果我写这样的东西(请原谅语法),
String[] list = new String[] {"abc","def","ghi","jkl"};
String str = null;
for (String s : list)
{
str = str + s + "," ;
}
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)
我去拿
abc,def,ghi,jkl, //Notice the comma in the end
Run Code Online (Sandbox Code Playgroud)
所以我必须重写上面的for循环,如下所示
...
for (int i = 0; i < list.length; i++)
{
str = str + list[i];
if (i != list.length - 1)
{
str = str + ",";
}
}
...
Run Code Online (Sandbox Code Playgroud)
这可以在Java中以更优雅的方式完成吗?
我肯定会使用StringBuilder/Buffer来提高效率,但我想说明这个案例而不是太冗长.优雅,我的意思是一个避免if在循环内部进行丑陋(?)检查的解决方案.
我经常遇到创建对象集合的String表示的任务.
例:
String[] collection = {"foo", "bar", "lorem", "dolar"};
Run Code Online (Sandbox Code Playgroud)
我要创建的表示:"foo,bar,lorem,dolar".
每当我遇到这个任务时,我都想知道哪种方法能够达到理想的效果.
我知道有很多方法可以获得所需的表示,但是例如我总是想知道,如果有可能通过使用for/each循环来创建字符串?
像这样:
StringBuilder builder = new StringBuilder();
for (String tag : list) {
builder.append(tag + ", ");
String representation = builder.toString();
// but now the String look like this: "foo, bar, lorem, dolar, " which nobody wants
Run Code Online (Sandbox Code Playgroud)
或者最好直接使用迭代器(如果有的话)?
假设list是一个集合(这就是它们在JDK中的表现方式):
Iterator<String> it = list.iterator();
while (it.hasNext()) {
sb.append(it.next());
if (!it.hasNext()) {
break;
}
sb.append(", ");
}
Run Code Online (Sandbox Code Playgroud)
当然,人们可以使用传统的for循环索引数组或执行许多其他操作.
将字符串列表转换为用逗号分隔每个元素的表示的最简单/最佳可读/最安全的方法是什么,并在开头或结尾处理边缘情况 …
我正在尝试代码一个基本的应用程序,它将获取用户想要输入的数字量,然后向用户询问数字,将数字保存在字符串数组中,然后以特定格式打印出来.
这是我到目前为止唯一的问题是我需要删除输出结束时的最后一个逗号,我确定我会发生这种错误......任何帮助都表示赞赏.
import java.util.Scanner;
public class info {
public void blue(){
Scanner sc = new Scanner(System.in);
Scanner dc = new Scanner(System.in);
System.out.println("how many numbers do you have?");
int a = dc.nextInt();
System.out.println("enter your numbers");
String index[]=new String [a];
String i;
for(int k = 0;k<index.length;k++){
i = sc.nextLine();
index[k]=i;
}
System.out.print("query (");
for(int l = 0;l<index.length;l++){
System.out.printf("'%s',",index[l]);
}
System.out.print(")");
}
}
Run Code Online (Sandbox Code Playgroud)