Сначала давайте рассмотрим основной формат. Формат, в который мы хотим преобразовать все это, чтобы окончательно преобразовать их в два целых числа. Давайте сделаем этот формат двумя числами, разделенными пробелом. Это IMO проще всего разобрать.
Тогда, давайте рассмотрим паттерны, которые все они разделяют. Например, первый ввод гарантированно содержит только круглые скобки, поэтому мы можем легко это распознать. Третий гарантированно содержит запятую, но без скобок. Таким образом, мы можем сгруппировать их с помощью правила, если оно содержит запятую, удалить скобки, если они есть, и заменить запятую пробелом.
Это три вниз, 2 вперед.
Теперь, что общего с этими двумя последними? Они делятся письмом. Мы можем легко поймать это письмо с помощью регулярных выражений, но давайте поговорим об этом позже. Итак, давайте сделаем логическое правило.
Если у фразы нет запятой,
мы проверяем, есть ли у него письмо. Если так, мы проверяем, есть ли у него пробел.
Если это так, мы разделяем пробел и заменяем символ на его целочисленное значение equilavent, корректно смещенное для представления его положения в алфавите.
В противном случае мы разбиваем букву с помощью регулярных выражений и выполняем вышеперечисленное.
Теперь у нас есть ясное представление о том, чего мы хотим достичь, давайте попробуем сделать это сами.
Вот так я бы сделал это в коде.
public int[] parseXYCoord(String s) {
String master=s;
if(s.contains(",")){
master=master.replace("(","").replace(")","");
master=master.replace(","," ");
}else if(master.matches("^[a-z]((\\s[0-8])|[0-8])$")){
int charValue=master.charAt(0)-'a'+1;
master=charValue+" "+master.charAt(master.contains(" ")?2:1);
}
return parseMaster(master);
}
private int[] parseMaster(String master) {
if(!master.matches("^[0-8] [0-8]$"))
throw new IllegalArgumentException("Inputted Number is incorrect!");
String[] splitMaster=master.split(" ");
return new int[]{Integer.parseInt(splitMaster[0]),Integer.parseInt(splitMaster[1])};
}
Я не слишком хорош в регулярных выражениях. Хотя это и некрасиво, но работа сделана. Посетите сайт DebugRegex , если вы хотите узнать, как использовать регулярные выражения.
Тестирование с использованием
System.out.println(Arrays.toString(parseXYCoord("4,3")));
System.out.println(Arrays.toString(parseXYCoord("4 3")));
System.out.println(Arrays.toString(parseXYCoord("(4,3)")));
System.out.println(Arrays.toString(parseXYCoord("d3")));
System.out.println(Arrays.toString(parseXYCoord("d 3")));
печатает
[4, 3]
[4, 3]
[4, 3]
[4, 3]
[4, 3]