2015-08-17 2 views
1

Я хотел бы знать, есть ли способ проанализировать эту строку, чтобы получить числовые значения, связанные с каждым дескриптором. Я хотел бы использовать эти значения для обновления итогов и средних значений.Разбор строки для информации в java

Строка выглядит следующим образом:

D/TESTING:﹕ 17-08-2015 13:28:41 -0400 
    Bill Amount: 56.23  Tip Amount: 11.25 
    Total Amount: 67.48  Bill Split: 1 
    Tip Percent: 20.00 

Код строки выглядит следующим образом:

String currentTransReport = getTime() + 
      "\nBill Amount: " + twoSpaces.format(getBillAmount()) + 
      "\t\tTip Amount: " + twoSpaces.format(getTipAmount()) + 
      "\nTotal Amount: " + twoSpaces.format(getBillTotal()) + 
      "\t\tBill Split: " + getNumOfSplitss() + 
      "\nTip Percent: " + twoSpaces.format(getTipPercentage() * 100); 

Я хочу, чтобы извлечь каждое из значений, как сумма счета, а затем магазин значение в переменной, которая будет использоваться. У меня есть доступ к единственной строке с информацией, а не коду или информации, которая строит строку.

+0

Конечно, что вы пробовали? – CubeJockey

+1

Одна из возможностей: Разделить строку, используя «пробел» в качестве разделителя, а затем проверить, можете ли вы проанализировать каждый из этих элементов массива для поплавка. Если можно, проанализируйте его и добавьте в другую переменную float. –

+0

Вам понадобится метод split() (на вкладках и новых строках) и, вероятно, простое регулярное выражение. – Michelle

ответ

0

Попробуй что-нибудь вроде этого, чтобы начать? Это займет все символы, начиная с подстроки, которую вы сейчас ищете, и заканчивая символом табуляции после подстроки. Возможно, вам придется изменить этот символ табуляции на что-то другое. Надеюсь, синтаксис в порядке, я некоторое время находился вне Java.

String myString = "17-08-2015 13:28:41 -0400Bill Amount: 56.23  Tip Amount: 11.25 Total Amount: 67.48  Bill Split: 1 Tip Percent: 20.00 "; 
String substrings[] = {"Bill Amount: ", "Tip Amount: ", "Total Amount: ", "Bill Split: ", "Tip Percent: "}; 
String results[] = new String[5]; 

for (int i = 0; i < substrings.length; i++){ 
    int index = myString.indexOf(substrings[i]) + substrings[i].length(); // where to start looking 
    String result = myString.substring(index, myString.indexOf(" ", index)); 
    results[i] = result; 
} 

Только что подтверждено, это в основном работает, только проблема заключается в отсутствии символа «» в конце строки.

0

Вы можете использовать регулярное выражение, что-то вроде этого:

Bill Amount: ([0-9.]+) *Tip Amount: ([0-9.]+).*Total Amount: ([0-9.]+) *Bill Split: ([0-9]+).*Tip Percent: ([0-9.]+) 

Фрагмент кода:

String pattern = "Bill Amount: ([0-9.]+)" + 
       " *Tip Amount: ([0-9.]+)" + 
       ".*Total Amount: ([0-9.]+)" + 
       " *Bill Split: ([0-9]+)" + 
       ".*Tip Percent: ([0-9.]+)" 
Pattern p = Pattern.compile(pattern, Pattern.DOTALL); 
Matcher m = p.matcher(textValue); 
if (m.find()) { 
    billAmount = Double.parseDouble(m.group(1)); 
    tipAmount = Double.parseDouble(m.group(2)); 
    totalAmount = Double.parseDouble(m.group(3)); 
    split  = Integer.parseInt(m.group(4)); 
    tipPct  = Double.parseDouble(m.group(5)); 
} 

Обратите внимание на DOTALL, поэтому в .* Удачные новой строки.

Смежные вопросы