【问题标题】:Checking for boolean in Java switch case在 Java 切换案例中检查布尔值
【发布时间】:2020-05-02 04:55:25
【问题描述】:

所以我有一个 switch case 到 switch 我正在输入一个字符串,我的 case 是 .contains,如下面的代码所示:

    intcheck: switch(line){
    case line.contains("0"):
    case line.contains("1"):
    case line.contains("2"):
    case line.contains("3"):
    case line.contains("4"):
    case line.contains("5"):
    case line.contains("6"):
    case line.contains("7"):
    case line.contains("8"):
    case line.contains("9"):
      break intcheck;
    default:
      names.put(br.readline(),0);
  }

是否有可能使用 switch 语句来实现类似的东西,或者我必须使用 if 语句。还有一种更简单的方法来检查字符串是否包含数字或者可以吗?

【问题讨论】:

  • 这是不可能的。 if (!line.replaceAll("\\D+", "").isEmpty()) 怎么样(创建一个新字符串,用 "" 替换 line 中的所有非数字,检查它是否不为空 - 只有当 line 至少有一个数字时才为真)。
  • @ElliottFrisch 为什么不只是line.matches(".*\\d.*")
  • @TimBiegeleisen 对我来说看起来不错。我选择了发生的第一件事,并且对这个问题似乎是合理的。
  • 如果你打开boolean你只能有两种情况:truefalse;并且 case 值必须是常量,而不是(非最终)变量或方法返回值。
  • 这是不可能的,因为您将String 作为switch 参数传递并在case 语句中与boolean 映射。因为你必须使用if..else ladder 或类似的逻辑。否则,您必须在 switch case 中使用相同的数据类型作为参数和映射。

标签: java numbers switch-statement contains


【解决方案1】:

虽然它可以用不同的方式做得更好,但如果你坚持使用switch-case 构造,试试这个:

OptionalInt containedNumber = OptionalInt.empty();
Intcheck: for( var i = 0; i < 10; ++i )
{
  switch( i )
  {
    case 0: if( line.contains( "0" ) containedNumber = OptionalInt.of( 0 ); break Intcheck;
    case 1: if( line.contains( "1" ) containedNumber = OptionalInt.of( 1 ); break Intcheck;
    …
    case 9: if( line.contains( "9" ) containedNumber = OptionalInt.of( 9 ); break Intcheck;
    default:
      continue IntCheck;
  }
}
if( containedNumber.isEmpty() ) names.put( br.readline(), 0 )

没有switch-case:

OptionalInt containedNumber = OptionalInt.empty();
for( var i = 0; (i < 10) && containedNumber.isEmpty(); ++i )
{
    if( line.contains( Integer.toString( i ) ) containedNumber = OptionalInt.of( i );
}
if( containedNumber.isEmpty() ) names.put( br.readline(), 0 )

【讨论】:

    猜你喜欢
    • 2018-05-16
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多