Android Studios breakiterator, чтобы разбить текст, используя только пробел - PullRequest
0 голосов
/ 02 декабря 2018

Мой код, чтобы разбить слово на части

Выбор слов для их изменения и т. Д.

Возьмем, к примеру, "make-them-vocal" код вверхтам это звучит как "make -"

Я не хочу, чтобы мне нужен был весь "make-your-vocal", поэтому, когда изменение сделано, я все еще могу вспомнить изменение, внесенное в память позже, и сравнить.

так в принципе любой способ использовать итератор разбиения или код вверх для разбиения только по пробелам?

код здесь тоже

TextView definitionView = (TextView) findViewById (R.id.et_MainText);

    definitionView.setMovementMethod(LinkMovementMethod.getInstance());
    definitionView.setText(definition, TextView.BufferType.SPANNABLE);
    Spannable spans = (Spannable) definitionView.getText();

    BreakIterator iterator = BreakIterator.getLineInstance(Locale.UK); // change this if you want word or what ever
    iterator.setText(definition);
   int start = iterator.first();


    for (int end = iterator.next(); end != BreakIterator.DONE; start = end, end = iterator
            .next()) {

        String possibleWord = definition.substring(start, end);
        if (Character.isLetterOrDigit(possibleWord.charAt(0)) ||checkPun(possibleWord.charAt(0)) ||checkSpace(possibleWord.charAt(0))) {
            ClickableSpan clickSpan = getClickableSpan(possibleWord);
            spans.setSpan(clickSpan, start, end,
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            //Log.d("ClickableSpan", "init: " + start +" "+ end);
        }

    }

1 Ответ

0 голосов
/ 02 декабря 2018

Я знаю, это плохо, но работает

Список listForStart;List listForEnd;

TextView DefinitionView = (TextView) findViewById (R.id.et_MainText);

    definitionView.setMovementMethod(LinkMovementMethod.getInstance());
    definitionView.setText(definition, TextView.BufferType.SPANNABLE);
    Spannable spans = (Spannable) definitionView.getText();


    String T = definitionView.getText().toString();
    listForStart = new ArrayList<String>();
    listForEnd = new ArrayList<String>();

    int testStart = 0;

    for(int i = 0; i<T.length();i++){ //getting the list completed
        if(T.charAt(i)==' '){ //found a space //go backwards unti
           listForStart.add(Integer.toString(testStart));
           listForEnd.add(Integer.toString(i));

            //Log.d("TEST", "init: "+testStart+" "+i);
           if(i+1 <T.length()){
               testStart = i+1;
           }else{break;}

        }
    }

    for(int i = 0;i != listForStart.size();i++){

        int start = Integer.valueOf(listForStart.get(i));
        int end = Integer.valueOf(listForEnd.get(i));
        String possibleWord = definition.substring(start,end);
        if (Character.isLetterOrDigit(possibleWord.charAt(0)) ||checkPun(possibleWord.charAt(0)) ||checkSpace(possibleWord.charAt(0))) {
            ClickableSpan clickSpan = getClickableSpan(possibleWord);
            spans.setSpan(clickSpan, start, end,
                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            //Log.d("ClickableSpan", "init: " + start +" "+ end);
        }

    }

}

...