我有一个单独的测试类,该类将传入一个高值和低值的字符串,中间带有一个:,表示数字0-6。一个例子是“ 6:2”。我需要根据:分隔符来分隔这些数字,但是我的教授不希望我使用split或任何正则表达式。
public class DominoHighLowImpl_Laursen implements Domino {
public static final String HIGH_LOW_STRING_SEPARATOR = ":";
public DominoHighLowImpl(String highLowString)
{
}
输入
String substr = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) + 1);
按预期返回定界符后的数字
但是
String substr = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) - 1);
不返回定界符之前的数字。最后一部分我做错了什么?
答案 0 :(得分:3)
检查substring(int beginIndex)和substring(int beginIndex, int endIndex):
String high = highLowString.substring(0, highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR));
String low = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) + 1);
答案 1 :(得分:1)
String substr = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) + 1);
之所以有效,是因为indexOf(HIGH_LOW_STRING_SEPARATOR)
为1。所以substring(2)
将包含“ 2”。
但是当你这样做
String substr = highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) - 1)
的值变为indexOf(0)
,因此存储了整个字符串“ 6:2”。
尝试
String substr = highLowString.substring(0,highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR));
获得“ 6”。
答案 2 :(得分:1)
substring
方法已重载,这意味着可以调用它传递不同数量的int
参数/自变量。如果仅用一个调用,则将获得子字符串,该子字符串从传递的索引开始,到String
的最大索引结束。如果使用两个参数调用它,您将收到子字符串,该子字符串从传递的较低索引开始,在传递第二个索引之前结束。
请参见以下示例:
public class DominoHighLowImpl_Laursen {
public static final String HIGH_LOW_STRING_SEPARATOR = ":";
private String highLowString;
public DominoHighLowImpl_Laursen(String highLowString) {
this.highLowString = highLowString;
}
public String getLow() {
return highLowString.substring(0, highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR));
}
public String getHigh() {
return highLowString.substring(highLowString.indexOf(HIGH_LOW_STRING_SEPARATOR) + 1);
}
public static void main(String[] args) {
DominoHighLowImpl_Laursen domino = new DominoHighLowImpl_Laursen("1020304:4456778");
System.out.println("High:\t" + domino.getHigh());
System.out.println("Low:\t" + domino.getLow());
}
}