【问题标题】:Trouble in a if statementif 语句中的问题
【发布时间】:2017-05-02 11:55:05
【问题描述】:

我在用 or 做一个条件时遇到了一些麻烦。 看看我的问题。如果我执行它,它的工作原理:

System.out.println(p_fileAccess.readLine().trim().startsWith("^ Item Type")); 

//这是真的,但如果我这样做了

System.out.println("data :"+(p_fileAccess.readLine().trim().startsWith("* Item Type")||p_fileAccess.readLine().trim().startsWith("^ Item Type ")));

它说的是假的 你能帮帮我吗?

【问题讨论】:

  • startsWith("^ Item Type ")中有一个空格
  • 我假设p_fileAccess.readLine().trim().startsWith("^ Item Type") 返回一个字符串,否则你将无法将它与另一个字符串连接起来。所以,你正在应用 or 到字符串,这绝对是错误的。
  • 同样的问题
  • p_fileAccess.readLine().trim().startsWith("^ Item Type") 不返回布尔值?

标签: java if-statement logical-operators randomaccessfile


【解决方案1】:

第一个条件读取第 1 行,第二部分再次读取(第 2 行)。

试试这个:

String line = p_fileAccess.readLine().trim();
System.out.println("data:" + (line.startsWith("* Item Type") || line.startsWith("^ Item Type ")));

【讨论】:

  • 正如我写给 OP 的评论:startsWith("^ Item Type ") 中有一个空格,所以第二部分永远不会是true(由于trim
  • 你是真神
  • @StefanWarminski,文件可以是格式 ^ Item Type type1 ^ Item Type type2 * Item Type type3 所以没关系。问题在于比较不同的行。
  • @BorLaze 好的,知道了。但如果line 是“^ 项目类型”,它仍然会返回false。 OP 的第一条语句将返回 true,您的解决方案不会。
  • @StefanWarminski,我猜你认为,.startFrom() 使用正则表达式,如 .replaceAll()。不,它使用纯字符串(不将其视为正则表达式)。
【解决方案2】:

假设 p_fileAccess 是一个缓冲阅读器或类似的阅读器,您的第二行代码正在查看文件中的两个不同行。第一个不以“* Item Type”开头,第二个不以“^ Item Type”开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2021-05-15
    • 2023-03-19
    相关资源
    最近更新 更多