2014-03-12 17 views
0

我对年龄优先考虑这个问题Java的年龄近似

这些人,是需要处理的输入

Dude 20-25 Major Injuries 
Guy 48 Panic 
Bob <=4 

我有先后次序谁必须由受害者的年龄被保存(年轻,年长的) 你可以受害者的名字后看到的数字/ s的年龄

所以如果是beetwen 20-25将被视为20

范围
  • 如果是< = 4,将被认为是4
  • 如果是< 4它会被认为是3
  • 如果是> 4它会被认为是5

我的问题是,什么是处理每一行,所以我可以从年龄 我需要将它存储得到考虑价值的最佳方式回到地方,比如一个数组或ArrayList中 的,所以如果它是:

Dude 20-25 Major Injuries 

它会变成老兄20大受伤

我只是需要想法来处理它,不需要是代码。

回答

-1

为了解析年龄,使用String.contains逻辑:

String input = "Bob 20-25"; 
Pattern pattern = 
Pattern.compile("[[(<=?)(>=?)]?[0-9]{1, 2}([0-9]{1,2} - [0-9]{1, 2})]"); 

Matcher matcher = 
pattern.matcher(input); 

String regex = matcher.group(); 
int age = Integer.parseInt(regex); 
if (regex.contains("=") {}; 
else if (regex.contains("<") { 
    age = age - 1; 
else if (regex.contains(">") { 
    age = age + 1; 
} 
else {} 

来存储数据,一旦你解析年龄,你可以使用一个PriorityQueue

PriorityQueue类提供了一个构造函数,您可以在其中指定自己的比较器来排列队列中的元素。这是存储将允许快速检索和索引的元素的最有效方式。

JavaDocs

+0

我觉得OP是寻找如何解析'<=','<'等 – GriffeyDog

+0

我承担这三种投入不是唯一可能的投入。使用这种方法会导致你需要〜300个if语句来使其通用。 – Holloway

+0

为什么-1?我做了编辑考虑其他年龄不> =,<=, <, > 4和20 - 25 –

0

你可以使用正则表达式,并通过你的规则替换的条款。下面是第一条规则的一个小例子:

String input = "Dude 20-25 Major Injuries"; 
Pattern pattern = Pattern.compile("([^\\d]*)([\\d]+)-([\\d]+)(.*)"); 
Matcher matcher = pattern.matcher(input); 
matcher.matches(); 
String output = matcher.group(1) + matcher.group(2) + matcher.group(4); 
System.out.println(input); 
System.out.println(output); 

OUTPUT:

Dude 20-25 Major Injuries 
Dude 20 Major Injuries 
+0

这一个真的有帮助,它给了我应该使用什么(正则表达式)的想法,它带有一个代码示例(一个工作的非运行时错误代码:))。非常感谢你。 –