2016-10-20 20 views
0

我有产品说明,家具,很多字,我需要找到产品的大小(尺寸)。问题是,尺寸描述的格式并不总是相同的。只有一样东西保持不变:数字之间用“x”表示,如果文本中有“x”,而另外一个“x”只有几个字符,则肯定是大小描述。爪哇找不到那么具体字符串

大小描述/所有这些出现的可能的格式/:
尺寸:110x76x60厘米/不带空格/
尺寸:150×64,5×200厘米/与空间/
尺寸:L90 X H55 X W60厘米/长度,高度,宽度/
尺寸:149×V110 X H40 /只的一些数字面前有/

也不要说,这些数字不必须是3位数字字母,他们可以只2位数字。
但是,如果仅仅为了一种格式而更容易做到这一点,我就把它拿来:),然后让程序一次又一次地检查整个列表中所有可能的格式。

回答

2

您到目前为止尝试过什么?

听起来像是一个regular expression

的JavaDoc一个完美的工作对regular expressions丰富的信息,以及如何在Java代码在这里实现他们:

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

+0

为OP作为额外的帮助,这里是一个例如:https://regex101.com/r/tSaBhy/1 – Andreas

+0

到目前为止,我不知道。 :)到目前为止,我唯一的建议是查找字符串“size:”,但是当我不知道何时停止解析文本时,它没有任何提示 - 大小描述并不总是以“cm”结尾。 – nilrem

+0

安德烈亚斯,圣牛:)看起来有趣,我会研究它,到目前为止我不知道发生了什么事。 :) – nilrem

0

您可以使用Matcher和正则表达式。

Matcher matcher = Pattern.compile("(\d+(?:,\d+)?) *x *[a-zA-Z]*(\d+(?:,\d+)?) *x *[a-zA-Z]*(\d+(?:,\d+)?)").matcher(productDescription); 
while (matcher.find()) { 
    String number1 = matcher.group(1); 
    String number2 = matcher.group(2); 
    String number3 = matcher.group(3); 
} 
+0

不匹配'64,5'。 – Andreas

+0

谢谢。我更新了答案。 – mm759

+0

如果您使用'(?:x)'[*非捕获*组](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#special ),调用'group()'时不必跳过索引。 – Andreas

1

我并不自豪,但它的工作原理,应该给你一个让它递归的想法。它也将让你不学习正则表达式,这不是每个人都想要了解:

此代码的工作,并会得到你正在寻找的大小:

public class App { 
    public static void main(String[] args) { 
     int l; 
     int h; 
     int w; 

     String text = "Size: l90 x h55 x w60"; 
     String text2 = text.replaceAll("\\D+"," ").trim(); 
     System.out.println(text2); 
     String[] sizes = text2.split(" "); 

     l = Integer.valueOf(sizes[0]); 
     h = Integer.valueOf(sizes[1]); 
     w = Integer.valueOf(sizes[2]); 
    } 
}