Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当试图用一个字符替换两个字符时,应用程序崩溃。只需替换一个字符就可以了_Java_Android - Fatal编程技术网

Java 当试图用一个字符替换两个字符时,应用程序崩溃。只需替换一个字符就可以了

Java 当试图用一个字符替换两个字符时,应用程序崩溃。只需替换一个字符就可以了,java,android,Java,Android,我正在开发一个Android应用程序,我很难用一个字符替换两个字符。 当只替换一个字符时,它工作,但当同时用一个字符替换两个字符时失败。 我发现应用程序可以正确地用两个新字符替换两个字符 您能帮我指出问题所在,以及如何修复代码吗 tt = new TextWatcher() { public void afterTextChanged(Editable s){ et.setSelection(s.length());

我正在开发一个Android应用程序,我很难用一个字符替换两个字符。 当只替换一个字符时,它工作,但当同时用一个字符替换两个字符时失败。 我发现应用程序可以正确地用两个新字符替换两个字符

您能帮我指出问题所在,以及如何修复代码吗

tt = new TextWatcher() {
            public void afterTextChanged(Editable s){
                et.setSelection(s.length());            }
            public void beforeTextChanged(CharSequence s,int start,int count, int after){}
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                et.removeTextChangedListener(tt);
                String tvalue = et.getText().toString();
                tvalue = tvalue.replaceAll("k", "1");;
                tvalue = tvalue.replaceAll("1h", "2");
    //THE first line replaces "k" with "1" WORKS FINE BUT THE second line for replacing "1h" with "2" DOES NOT. IT CRASHES. I found that it is possible to replace "1h" with "2 "(two followed by space)!
      et.addTextChangedListener(tt);
            }
        };
        et.addTextChangedListener(tt);
    }
setSelection(s.length());
提前谢谢。这是我在这个网站上的第一个问题

下面是日志猫

02-02 09:39:27.674      838-838/in.healthy100.gujjuwriter E/MessageQueue-JNI﹕ java.lang.IndexOutOfBoundsException: setSpan (10 ... 10) ends beyond length 9
            at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1016)
            at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:592)
            at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:588)
            at android.text.Selection.setSelection(Selection.java:76)
            at android.text.Selection.setSelection(Selection.java:87)
            at android.widget.EditText.setSelection(EditText.java:94)
            at in.healthy100.gujjuwriter.MyActivity$1.onTextChanged(MyActivity.java:270)
            at android.widget.TextView.sendOnTextChanged(TextView.java:7408)
            at android.widget.TextView.handleTextChanged(TextView.java:7467)
            at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9183)
            at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
            at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:223)
            at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:136)
            at android.widget.TextView.doKeyDown(TextView.java:5532)
            at android.widget.TextView.onKeyDown(TextView.java:5343)
            at android.view.KeyEvent.dispatch(KeyEvent.java:2640)
            at android.view.View.dispatchKeyEvent(View.java:7665)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2035)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1505)
            at android.app.Activity.dispatchKeyEvent(Activity.java:2418)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1962)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3852)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3558)
            at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3718)
            at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2010)
            at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1704)
            at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1695)
            at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1987)
            at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.j
02-02 09:39:27.674      838-838/in.healthy100.gujjuwriter D/AndroidRuntime﹕ Shutting down VM

这是导致错误的代码:

setSelection(s.length());
您正试图使用原始字符串的长度将光标设置到字符串的末尾。运行此代码时:

tvalue = tvalue.replaceAll("k", "1");
tvalue = tvalue.replaceAll("1h", "2");
字符串的长度不会更改,因此使用原始长度是可以的。但是,运行此代码时:

tvalue = tvalue.replaceAll("k", "1");
tvalue = tvalue.replaceAll("1h", "2");
字符串的长度将减少,因为您将用1个字符替换2个字符。因此,使用原始字符串的长度调用setSelection()将导致越界错误,因为您试图将光标移过字符串的末尾

解决方案是在替换完成后,使用新字符串的长度调用setSelection():

setSelection(tvalue.length());

有什么例外?分享你的日志请发送你的日志什么是你的日志,张贴在这里感谢快速评论。我是android studio的新手,不知道在哪里可以找到logcat。一旦我找到了logcat,我会发布它。谢谢