2016-10-06 3 views
0

Хорошо, поэтому я посмотрел this (вопрос о том, как разбить строку), однако ответ не имеет отношения к моему вопросу.Как разбить строку, которую вводит пользователь

Пользователь вводит вес, который хранится в базе данных sqlite, но я также хочу, чтобы номер отображался в TextView ниже, где он был только что введен (поскольку приложение отслеживает вес в течение 7 дней).

Когда я пытаюсь получить строку из моей БД, ее хранят в виде длинной строки, и я хочу разбить эту строку (надеюсь, у меня есть смысл!).

У меня есть следующий метод;

public String[] getWeight() { 

    String selectQuery = "SELECT " + DowncroftContract.WEIGHT_VALUE + " FROM " + DowncroftDatabase.WEIGHT_TABLE; //+ " WHERE " + DowncroftContract.WEIGHT_DOGS_ID + " = " + str_dogsId + " ORDER BY " + DowncroftContract.WEIGHT_DATE + " ASC;"; 
    SQLiteDatabase db = downcroftDatabase.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    String[] data = null; 

    if (cursor.moveToFirst()) { 
     do { 
      results = cursor.getString(cursor.getColumnIndex(DowncroftContract.WEIGHT_VALUE + "")); 
      String[] splitString = results.split(""); 
      String split1 = splitString[1]; 
      String split2 = splitString[2]; 
      DayOne.append(split1); 
      DayTwo.append(split2); 
     } while (cursor.moveToNext()); 

    } 
    cursor.close(); 
    return data; 
} 

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

E.G Пользователь вводит 20 нажатий Enter - он затем падает в TextView под названием DayOne.

На следующий день пользователи вводят 24 и нажимают enter, а затем опускаются в TextView под названием DayTwo.

Я думаю, мне нужен массив с возможно циклом, но мне интересно, можно ли достичь того, чего я хочу, изменив то, что у меня уже есть?

+1

может у меня пример ввода для разделения и вашей продукции? –

+1

Пожалуйста, укажите пример ввода и ожидаемый пример вывода. Не объясняйте, просто напишите, что ожидается. – LoveForDroid

ответ

1

Вы просто хотите разбить строку каждые 2 символа?

Как у вас есть строка 123456 и вы хотите 12, 34, 56?

Попробуйте это:

String[] split = result.split("(?<=\\G..)");

Это собирается разделить ваши строки каждые 2 символов. \G утверждает позицию после предыдущего совпадения (или начала строки, если не было предыдущего совпадения), за которым следуют 2 символа.

+0

Да, вы правы, однако, когда я вносил изменения, как вы предлагали, я получаю следующую ошибку; java.lang.IllegalStateException: Не удалось прочитать строку 0, col -1 из CursorWindow. Перед доступом к данным убедитесь, что курсор инициализирован правильно. Однако я инициализировал курсор, как вы можете видеть в моем коде выше? –

+0

Невозможно изменить это сообщение, у вас либо было что-то неправильно, или вы случайно что-то изменили.Я не уверен, правильно ли вы работаете с курсором, не помните, что это действительно хорошо, извините. – Shadov

+0

Паттерн '(? <= \\ G ..)' не работает в Android (вкус ICU), только в Java ('java.util.regex'). –

0

[Guy выше сделал в основном то же самое, только видел на обновления, фрагмент кода, вероятно, все еще быть полезным, хотя ..]

Та часть, которая раскалывает ваша строка String[] splitString = results.split("");

Это раскалывает после каждое «ничего», поэтому по сути, после того, как каждый символ разбил строку.

Вот небольшой фрагмент кода я работал вместе для вас ...

import java.util.Arrays; //only essential for the Arrays toString bit... 

public class Main { 

    //Static so it's usable anywhere.. 
    public static String[] splitStringBy(int everyXLetter, String stringCode) 
    { 
     // Split the given string by regex, every Xth letter... 
     String[] splitIntoSingleElements = stringCode.split("(?<=\\G.{"+everyXLetter+"})"); 
     // Return it 
     return splitIntoSingleElements; 
    } 

    public static void main(String[] args) 
    { 
     //Set some string text... 
     String text = "askfjaskfjasf"; 
     //Split and store the string using the above function 
     String[] splitText = splitStringBy(2, text); 

     //Return it any way you like 
     System.out.println(Arrays.toString(splitText)); // [as, kf, ja, sk, fj, as, f] 
     System.out.println(splitText[0]); // as 
    } 
}