将 API 中的字符串从括号开始分成两部分
Splitting a string from API into two parts starting from a bracket
我有一个方法可以检查从 API 生成的引文是否在 130 个字符以内,然后将其分成两部分,前面部分是引文,第二部分是作者。
API 引用的 html 输出是:(例如)"Kindness in words creates confidence. (Lao Tzu)"
我想在两个单独的文本视图中显示它们并删除括号。
Textview 1 - 引用
Textview 2 - 作者(删除括号)
不幸的是,应用程序有时会崩溃并显示 IndexOutOfBoundsException,还有其他方法可以做到这一点吗?
先谢谢你。
private void check(String quote){
//check length
int length = quote.length();
if (length <= 130) {
//split to quote and author strings
String[] parts = quote.split(Pattern.quote("(")); // Split on ( into 2 parts, quote and author
String part1 = parts[0]; //quote
String part2 = parts[1]; //author with )
String removedSymbolsPart2 = part2.replaceAll("\)", ""); //remove ) symbol
String finalQuote = Html.fromHtml(part1).toString();
String finalAuthor = Html.fromHtml(removedSymbolsPart2).toString();
quoteTextViewMain.setText(finalQuote);
authorTextViewMain.setText(finalAuthor);
} else {
//get another quote
getQuote();
}
}
索引越界错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.amethyst.secretgarden, PID: 21802
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.amethyst.secretgarden.MainActivity.check(MainActivity.java:83)
at com.amethyst.secretgarden.MainActivity.access[=12=]0(MainActivity.java:24)
at com.amethyst.secretgarden.MainActivity.success(MainActivity.java:106)
at com.amethyst.secretgarden.MainActivity.success(MainActivity.java:103)
at com.github.kittinunf.fuel.core.DeserializableKt$response.invoke(Deserializable.kt:150)
at com.github.kittinunf.fuel.core.DeserializableKt$response.invoke(Unknown Source:4)
at com.github.kittinunf.fuel.core.DeserializableKt$response$asyncRequest.invoke(Deserializable.kt:192)
at com.github.kittinunf.fuel.core.DeserializableKt$response$asyncRequest.invoke(Unknown Source:0)
at com.github.kittinunf.fuel.core.RequestExecutionOptionsKt$sam$java_lang_Runnable[=12=].run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:226)
at android.app.ActivityThread.main(ActivityThread.java:7231)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:500)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:913)
I/Process: Sending signal. PID: 21802 SIG: 9
String tmp = "Kindness in words creates confidence. (Lao Tzu)";
int index1 = tmp.indexOf("(");
int index2 = tmp.indexOf(")");
if(index1 > 0 && index2 > 0){
String Author = tmp.substring(index1+1,index2);
String quote = tmp.substring(0,index1);
System.out.println(Author);
System.out.println(quote);
}
输出
Lao Tzu
Kindness in words creates confidence.
我会用
String [] parts = quote.split ("("); // no pattern neeeded
if (parts.length > 1) {
String part1 = parts[0]; //quote
String part2 = parts[1]; //author with )
String removedSymbolsPart2 = part2.replace(")", ""); // not replaceAll
}
我有一个方法可以检查从 API 生成的引文是否在 130 个字符以内,然后将其分成两部分,前面部分是引文,第二部分是作者。
API 引用的 html 输出是:(例如)"Kindness in words creates confidence. (Lao Tzu)"
我想在两个单独的文本视图中显示它们并删除括号。 Textview 1 - 引用 Textview 2 - 作者(删除括号)
不幸的是,应用程序有时会崩溃并显示 IndexOutOfBoundsException,还有其他方法可以做到这一点吗?
先谢谢你。
private void check(String quote){
//check length
int length = quote.length();
if (length <= 130) {
//split to quote and author strings
String[] parts = quote.split(Pattern.quote("(")); // Split on ( into 2 parts, quote and author
String part1 = parts[0]; //quote
String part2 = parts[1]; //author with )
String removedSymbolsPart2 = part2.replaceAll("\)", ""); //remove ) symbol
String finalQuote = Html.fromHtml(part1).toString();
String finalAuthor = Html.fromHtml(removedSymbolsPart2).toString();
quoteTextViewMain.setText(finalQuote);
authorTextViewMain.setText(finalAuthor);
} else {
//get another quote
getQuote();
}
}
索引越界错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.amethyst.secretgarden, PID: 21802
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.amethyst.secretgarden.MainActivity.check(MainActivity.java:83)
at com.amethyst.secretgarden.MainActivity.access[=12=]0(MainActivity.java:24)
at com.amethyst.secretgarden.MainActivity.success(MainActivity.java:106)
at com.amethyst.secretgarden.MainActivity.success(MainActivity.java:103)
at com.github.kittinunf.fuel.core.DeserializableKt$response.invoke(Deserializable.kt:150)
at com.github.kittinunf.fuel.core.DeserializableKt$response.invoke(Unknown Source:4)
at com.github.kittinunf.fuel.core.DeserializableKt$response$asyncRequest.invoke(Deserializable.kt:192)
at com.github.kittinunf.fuel.core.DeserializableKt$response$asyncRequest.invoke(Unknown Source:0)
at com.github.kittinunf.fuel.core.RequestExecutionOptionsKt$sam$java_lang_Runnable[=12=].run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:226)
at android.app.ActivityThread.main(ActivityThread.java:7231)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:500)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:913)
I/Process: Sending signal. PID: 21802 SIG: 9
String tmp = "Kindness in words creates confidence. (Lao Tzu)";
int index1 = tmp.indexOf("(");
int index2 = tmp.indexOf(")");
if(index1 > 0 && index2 > 0){
String Author = tmp.substring(index1+1,index2);
String quote = tmp.substring(0,index1);
System.out.println(Author);
System.out.println(quote);
}
输出
Lao Tzu
Kindness in words creates confidence.
我会用
String [] parts = quote.split ("("); // no pattern neeeded
if (parts.length > 1) {
String part1 = parts[0]; //quote
String part2 = parts[1]; //author with )
String removedSymbolsPart2 = part2.replace(")", ""); // not replaceAll
}