【问题标题】:Java: String.length() > 0 and Array.size() > 0 shorthand? [closed]Java:String.length() > 0 和 Array.size() > 0 速记? [关闭]
【发布时间】:2014-11-25 04:59:40
【问题描述】:

必须有一种方法可以对其进行简写。我一直在用它,它一点也不漂亮。

ArrayList<String> items = new ArrayList<String>();
items.add( "Foo" );
items.add( "Bar" );

String zxc;

我知道这个存在

for( String s : items ) {
    zxc = s;
}

但是当使用索引时,必须有一种简写方式

for( int i = 0; i < items.size(); i++ ) {
    zxc = items.get( i );
}

【问题讨论】:

  • 这两个循环都不做任何事情。你想做什么?
  • 不幸的是没有。如果你真的需要索引,你必须使用传统的for
  • 考虑到描述,这个问题的标题并没有真正的意义。您在哪里测试大于 0 的字符串长度?
  • 除了缩短代码之外,我并没有试图做任何事情。这只是一个例子。我将为其添加逻辑。
  • for each 循环是一种更简单的方法。

标签: java arrays shorthand


【解决方案1】:

不,没有。 您可以做的唯一小调整是定义一个大小变量:

int iSize = items.size();
for( int i = 0; i < iSize; i++ ) {}

这样您就不必在每次迭代时都运行 size() 方法。这也是基本的/简写的循环,你应该知道如何在 内编写这些行

【讨论】:

  • 甚至for(int i = 0, n = items.size(); i &lt; n; i++ ) {},但我认为JIT编译器会自己做这样的优化......
  • @Benjamin 您的解决方案仍然更好,因为它将n 的范围限制为for 循环。
  • @Ajk_P 速记循环习语的主要目的不是为了节省打字,而是为了使代码更明确并消除这样的错误:for (int i = 0; i &lt; foo; i++) { for (int j = 0; j &lt; bar; i++) { ... } }
  • 我理解不每次都运行 size() 方法的好处,但它会产生更多代码。
【解决方案2】:

您总是可以创建自己的索引。

int i=0;
for( String s : items ) {
   doStuff();
   i++;
}

【讨论】:

  • 是的。但是该代码可能一样长:/
  • 同意。但我认为任何人都可以提供替代品,所以我想我会贡献一个
  • 当然。我可能不是唯一一个寻找替代品的人。
【解决方案3】:

!String.isEmpty()!List.isEmpty() 怎么样?

StringList 定义了一个 isEmpty() 方法,你只需要否定它来判断长度或大小是否大于 0。

String s = "asdf";
List<String> l = Arrays.asList("one", "two");

if (!s.isEmpty())
    System.out.println("String has characters.");
if (!l.isEmpty())
    System.out.println("List has elements.");

【讨论】:

  • 这回答了标题中的问题,但问题主体是关于不同的东西。考虑在 FGITWing 之前阅读正文。
  • 这很好。有什么办法可以添加项目吗?喜欢 l.add(item);?
  • @JonasB Arrays.asList() 返回由指定数组支持的固定大小的列表。如果您想要一个可修改的List,请使用ArrayList,例如List&lt;String&gt; l = new ArrayList&lt;&gt;();
猜你喜欢
  • 2018-05-04
  • 2021-08-13
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多