【问题标题】:How do i write Conditional Logic for string Using java我如何使用java为字符串编写条件逻辑
【发布时间】:2016-11-02 05:19:34
【问题描述】:

我们有零售行业数据。在那,我们需要使用转换因子将每个 Unit SKU'S 转换为 CASE SKU'S(即第 4 列) 输入数据

We have input data for 
Col1                        COL2               COL3       COL4  col5
ABHS-SMH-4OZ-01            EA               CS             12     1
ABHK-SMH-01                EA               CS             24      1

转换后的预期数据:

Col1                        COL2               COL3       COL4 col5 
ABHS-SMH-4OZ-12            EA                   CS       12     1
ABHK-SMH-24                EA                   CS       24     1

我们正在尝试用 Java 语言编写转换/条件逻辑。

到目前为止,我们尝试了以下正则表达式:

我想搜索一些东西

例如“ABHS-SMH-4OZ-01”

搜索“-01”

返回“ABHS-SMH-4OZ-24”

任何帮助将不胜感激

This is my regex so far

"ABHS-SMH-4OZ-01".matches(".-01."); 提前致谢。

【问题讨论】:

  • 是的,有很多方法可以做到这一点。如果你能花点时间自己寻找答案,这对你来说将是一次很好的学习经历。您可以通过在此处发布答案来帮助他人。
  • 到目前为止你尝试过什么?当您遇到困难时,我们会在这里为您提供帮助,而不仅仅是为您解决问题
  • 我几乎从头到尾都试过了,但没能做到。比我在这里发布的研究之后。
  • 我们也在这里帮助和解决问题。这取决于要求是什么。如果您不喜欢任何问题,请不要灰心。在我看来,如果我们知道我们应该回答的答案,否则我们不应该不喜欢这个问题。
  • 我试图找出这个链接但不确定它是否与上面相关:stackoverflow.com/questions/537174/…

标签: java regex string conditional


【解决方案1】:

说明

^(?=(?:(?:(\S+))\s+){4})(\S+-)01(?=\s)

** 要更好地查看图像,只需右键单击图像并选择在新窗口中查看

此正则表达式将执行以下操作:

  • 向前看,将 COL4 中的值捕获到捕获组 1 中
  • 匹配 COL1 中的前导字符直到最后一个 -01
  • 将 COL1 中的值替换为前导字符,后跟 COL4 中的值

示例

现场演示

示例文本

Col1                        COL2               COL3       COL4  col5
ABHS-SMH-4OZ-01            EA               CS             12     1
ABHK-SMH-01                EA               CS             24      1

更换后

Col1                        COL2               COL3       COL4  col5
ABHS-SMH-4OZ-12            EA               CS             12     1
ABHK-SMH-24                EA               CS             24      1

说明

NODE                     EXPLANATION
----------------------------------------------------------------------
  ^                        the beginning of the string
----------------------------------------------------------------------
  (?=                      look ahead to see if there is:
----------------------------------------------------------------------
    (?:                      group, but do not capture (4 times):
----------------------------------------------------------------------
      (?:                      group, but do not capture:
----------------------------------------------------------------------
        (                        group and capture to \1:
----------------------------------------------------------------------
          \S+                      non-whitespace (all but \n, \r,
                                   \t, \f, and " ") (1 or more times
                                   (matching the most amount
                                   possible))
----------------------------------------------------------------------
        )                        end of \1
----------------------------------------------------------------------
      )                        end of grouping
----------------------------------------------------------------------
      \s+                      whitespace (\n, \r, \t, \f, and " ")
                               (1 or more times (matching the most
                               amount possible))
----------------------------------------------------------------------
    ){4}                     end of grouping
----------------------------------------------------------------------
  )                        end of look-ahead
----------------------------------------------------------------------
  (                        group and capture to \2:
----------------------------------------------------------------------
    \S+                      non-whitespace (all but \n, \r, \t, \f,
                             and " ") (1 or more times (matching the
                             most amount possible))
----------------------------------------------------------------------
    -                        '-'
----------------------------------------------------------------------
  )                        end of \2
----------------------------------------------------------------------
  01                       '01'
----------------------------------------------------------------------
  (?=                      look ahead to see if there is:
----------------------------------------------------------------------
    \s                       whitespace (\n, \r, \t, \f, and " ")
----------------------------------------------------------------------
  )                        end of look-ahead
----------------------------------------------------------------------

【讨论】:

  • 我们在 Java 中尝试了这个表达式,它解决了我的目的:output_row.col1=input_row.co1.substring(0,input_row.col1.lastIndexOf("-")+1)+input_row.col4;感谢您的支持并为我提供了很好的解决方案。谢谢。
  • 没问题!我很乐意提供帮助。如果您满意,您介意将答案标记为例外吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 2010-10-29
  • 2011-11-16
  • 2014-05-22
  • 1970-01-01
相关资源
最近更新 更多