Я работаю над моим новым Java-приложением.Это анализатор игры в блэкджек.Сервер отправляет результат игры в блэкджек пользователю, мое приложение анализирует его, а затем показывает описание игры пользователю.Результат игры выглядит следующим образом: #N145. 20(9♥️,6♠️,J♠️,Q♦️) - 19(8♦️,A♠️)
Здесь 145 - это номер игры, 20 - это счет казино, а 19 - счет игрока.И этот ряд должен быть разобран в объект Game.Вот класс игры:
//import
public class Game {
private final int gameNumber;
private final boolean casinoWon;
private final Set<Card> gamerDeck;
private final Set<Card> casinoDeck;
private final int gamerScore;
private final int casinoScore;
public Game(int gameNumber, boolean casinoWon,
Set<Card> gamerDeck, Set<Card> casinoDeck,
int gamerScore, int casinoScore) {
this.gameNumber = gameNumber;
this.casinoWon = casinoWon;
this.gamerDeck = gamerDeck;
this.casinoDeck = casinoDeck;
this.gamerScore = gamerScore;
this.casinoScore = casinoScore;
}
//getters
}
Я начал писать парсер, но думаю, что делаю это неправильно.Вот код из него:
//import
public class StringParser {
public Game parseStringToGame(String inputString) throws ParseException {
int gameNumber = -1;
boolean isCasinoWon = false;
int gamerScore = -1;
int casinoScore = -1;
String stringGamerDeck = "";
String stringCasinoDeck = "";
Iterator<Character> iterator = stringToCharacterList(inputString).iterator();
while(iterator.hasNext()) {
StringBuilder currentObject = new StringBuilder();
Character c = iterator.next();
if (c == '#')
c = iterator.next();
else
throw new ParseException();
if (c == 'N')
c = iterator.next();
else
throw new ParseException();
while(Character.isDigit(c)) {
currentObject.append(c);
c = iterator.next();
}
gameNumber = Integer.parseInt(currentObject.toString());
currentObject = new StringBuilder();
//c=='.'
if (c == '.')
c = iterator.next();
else
throw new ParseException();
//c==' '
if (c == ' ')
c = iterator.next();
else
throw new ParseException();
//to be continued
}
}
private List<Character> stringToCharacterList(String s) {
List<Character> characters = new LinkedList<>();
for (char c : s.toCharArray())
characters.add(c);
return characters;
}
}
Как видите, это выглядит очень отвратительно.Есть ли какой-нибудь более продвинутый способ разбора строки?