该问题要求比较字符串是否具有连续相同的字母并将其重写为字母加字母的数字,例如AAAAA,如5A中所示。但是当我使用if语句进行比较时,输出变成了一些非常长的数字而不是期望的结果。
以下是问题的一部分: 行程编码是一种简单的压缩方案,最好在数据集主要包含大量重复字符的长时间运行时使用。例如,AAAAAAAAAA是10 A的运行。我们可以使用* A10这样的符号对此运行进行编码,其中*是表示运行的特殊标志字符,A是运行中的符号,10是运行的长度。
以下是代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/dialog"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:onclick="hello"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical"
android:background="#FFFFEE"
android:layout_centerVertical="true"
android:id="@+id/ll">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:id="@+id/title"/>
</LinearLayout>
<RelativeLayout>
答案 0 :(得分:4)
你的问题在这里:
if(s.charAt(i)=s.charAt(i-1));
首先,您必须使用char
而不是==
来比较=
。其次,在;
语句之后放置if
将导致它立即终止。换句话说,以下行不再是if
语句的一部分。改为:
if(s.charAt(i) == s.charAt(i-1))
修改强>
关于你的评论,这样的事情应该有效,尽管我没有测试它。只需使用以下内容替换当前的大if
块:
if (flag == '#' || flag == '$' || flag == '*' || flag == '&') {
char last = ' ';
char curr = ' ';
int count = 1;
for (int i = 0; i < s.length(); i++) {
last = curr;
curr = s.charAt(i);
if (curr == last) {
count++;
} else if (last != ' ') {
System.out.print(("" + count) + last);
count = 1;
}
}
System.out.print(("" + count) + last);
}