我需要编写一个读取字符串的Java程序,并确定是否有这两个字母:小写字母“e”或“d”。
这就是我到目前为止所写的内容!任何想法为什么这不起作用?
class ex2 {
public static void main(String[] args) {
//boolean arg1;
char e = 'e';
char d = 'd';
String x = "This is my test";
char[] xh = new char[x.length()];
for(int i=0; i<= x.length();i++) {
if (xh[i] == e || xh[i] == d) {
// arg1 = true;
System.out.println("Correct"); // Display he string
} else {
//arg1 = false;
System.out.println("Wrong");
}
}
}
}
答案 0 :(得分:1)
首先你有一个ArrayOutOfBound
例外,因为你需要在长度之前停止,即i<x.length()
。
现在你的问题是你要测试一个充满空字符的char
数组。您需要针对字符串进行测试:
if (x.charAt(i) == e || x.charAt(i) == d) {
答案 1 :(得分:1)
你永远不会在你的阵列中放任何东西。 set.seed(123)
result <- df %>% group_by(`column Y`) %>% filter(row_number() %in% sample(seq_len(n()),floor(n()/2)))
##Source: local data frame [5 x 3]
##Groups: column Y [3]
##
## id1 column Y laclen
## <int> <fctr> <int>
##1 9830 A 6
##2 9922 B 5
##3 9917 B 8
##4 9914 C 2
##5 9914 C 9
只是声明一个长度等于char[] xh = new char[x.length()];
的数组,它不会将x
的元素设置为xh
的元素。相反,使用:
x
您还需要将循环更改为:
char[] xh = x.toCharArray();
避免您目前看到的越界异常。
答案 2 :(得分:1)
你的主要问题是你没有正确地迭代char
String
,这是最好的方法:
for (int i = 0, length = x.length(); i < length; i++) {
char c = x.charAt(i);
...
}
假设您使用 Java 8 ,您可以依靠Stream API
执行与下一步相同的操作:
boolean result = x.chars().anyMatch(c -> c == 'e' || c == 'd');
答案 3 :(得分:0)
如果您想使用它,这是一个简单的解决方案
来自评论的 注意,如果没有e
和d
,您必须保留的帐户,这将对字符串的内容进行两次迭代但不是第二个代码,因为第二个例子只是每个
String str = "ewithd";
if (str.contains("e") || str.contains("d")) {
System.out.println("sucess");
} else
System.out.println("fail");
如果您想使用数组,那么您也可以使用foreach()
char[] ch = str.toCharArray();
for (char c : ch) {
if (c == 'e' || c == 'd') {
System.out.println("success");
else
System.out.println("fail");
}
}