我正在尝试使用以下代码,以便给定一个字符串,给出相同字符的最长连续子序列的长度。我收到错误“不兼容的类型:char无法转换为java.lang.String”。我已经评论了下面发现错误的位置。
public class Test {
public int longestRep(String str)
{
int currLen = 1;
String currLet = "";
String maxLet = "";
int maxCount = 0;
int currPos = 0;
int strLen = str.length();
for(currPos = 0; currPos < strLen; currPos++)
{
currLet = str.charAt(currPos); //error is on this line
if(currLet = str.charAt(currPos+1))
{
currLen++;
}
else
{
if(currLen > maxLen)
{
maxLen = currLen;
maxLet = currLet;
currLen = 1;
}
}
}
}
public static void main(String args[])
{
longestRep("AaaaMmm");
}
}
答案 0 :(得分:7)
String.charAt(int)
返回一个字符。但currLet
的类型为String
,因此您无法指定字符。请改用currLet = Character.toString(str.charAt(currPos));
。
答案 1 :(得分:2)
currLet = str.charAt(currPos);
无法将String
值分配给char
,它们是不同的类型,苹果和橙子if (currLet = str.charAt(currPos + 1)) {
实际上是一项任务(使currLet
等于str.charAt(currPos + 1)
)if (currLen > maxLen) {
- maxLen
未定义return
方法中的任何内容...... 尝试更改:
String currLet = "";
更像char currLet = '\0';
和String maxLet = "";
到char maxLet = '\0';
if (currLet = str.charAt(currPos + 1)) {
类似于if (currLet == str.charAt(currPos + 1)) {
int maxLen = 0
添加到您的变量设置(可能位于int maxCount = 0
)现在,根据您的示例代码,public int longestRep(String str) {
需要public static int longestRep(String str) {
,以便您通过main
方法拨打电话...
答案 2 :(得分:2)
正如编译器所说,您无法将char
转换为String
。如果你有一个char
并且你真的想将其转换为长度为1的String
,那么这将有效:
String s = String.valueOf(c);
或
String s = Character.toString(c);
但是,如果您使用的字符是charAt
获得的,则另一种解决方法是删除charAt
并使用substring
返回长度为1的字符串:< / p>
currLet = str.substring(currPos, currPos + 1);
答案 3 :(得分:2)
将空字符串添加到表达式的开头,因为将char和String结果添加到String中。
转换一个字符 "" + 'a'
转换多个字符 "" + 'a' + 'b'
转换多个字符有效,因为首先评估"" + 'a'
如果""
位于最后,您将获得"195"
请记住,Java语言保证(Java Language Specification,Java SE 7 Edition,第15.12.4.2节)所有参数都是从左到右进行评估(与其他语言不同,评估顺序未定义)