我是编程和处理Java String分配的新手。问题是:
这就是我所做的:
String phrase = new String ("This is a String test.");
String middle3 = new String ("tri"); //I want to print the middle 3 characters in "phrase" which I think is "tri".
middle3 = phrase.substring (9, 11); // this only prints out 1 letter instead of 3
System.out.println ("middle3: " + middle3);
这是我的输出:
Original phrase: This is a String test.
Length of the phrase: 18 characters
middle3: S
我还认为字符串中有18个字符"短语",但如果没有,请告诉我。提前感谢您的帮助!
答案 0 :(得分:5)
考虑如何在不对substring()
方法的边界进行硬编码的情况下检索中间3个字符。在这方面,您可以使用length()
方法。例如,奇数长度字符串的中间字符始终位于索引str.length()/2
,而偶数长度字符串的两个中间字符始终位于索引str.length()/2
和(str.length()/2) - 1
。所以三个中间字符的定义将取决于你。但是对于我们的缘故,我们只会在索引(str.length()/2)-1
,str.length()/2
和(str.length()/2)+1
处创建3个中间字符。有了这些信息,您可以修改以前的这行代码,
middle3 = phrase.substring (9, 11);
到
middle3 = phrase.substring (phrase.length()/2 - 1, phrase.length()/2 + 2);
至于为什么以前的原始代码行只返回一个字母,它与substring
方法的参数有关。第一个参数是包含的,但第二个参数不是。因此,您只检索9到10之间的字符。
This is a String test.
^^^
9,10,11 (11 is not included)
我指出的三个字符分别位于索引9,10和11。你只检索了字符' '和' S'一起只是" S&#34 ;.这解释了之前的单字母输出。
答案 1 :(得分:3)
首先,phrase
中有22个字符。
"This is a String test."
^^^^^^^^^^^^^^^^^^^^^^ --> 22
请注意,空格()会计入字符数。此外,
String
有一个方法length()
,可以为您提供此号码。
String phrase = "This is a String test.";
int phraseLength = phrase.length(); //22
从那里,我们可以通过处理值phraseLength/2
来获得中间三个字符。中间三个字符将在中间位置之前开始,然后停止一个。但是,由于string(int, int) method将结束索引设为exclusive
,因此我们应将其增加一。
String phrase = "This is a String test.";
int phraseLength = phrase.length(); //22
String middle3 = phrase.substring(phraseLength/2 - 1, phraseLength/2 + 2); // will have the middle 3 chars.
如果phrase
的长度为奇数,则返回中间3个字符。如果phrase
的长度是偶数(就像在这里一样),这将返回左中间3个字符。 (例如,在1,2,3,4
中,我使用左中间代表2
而右中间代表3
。
另一方面,写new String("asdf")
是不必要和不好的做法。只需使用字符串文字即可。
String phrase = new String ("This is a String test."); //Bad
String phrase = "This is a String test."; //Good
答案 2 :(得分:2)
您在begind索引和字符串中的结束索引中有错误,这是正确的代码:
String phrase = new String("This is a String test.");
String middle3 = phrase.substring(11, 14);
System.out.println("middle3: " + middle3);