2016-09-25 225 views
1

我是新来编程和工作的Java字符串分配。这个问题说:如何在Java中打印字符串的中间三个字符?

  1. 声明String类型的命名中36的变量(把近程序的顶部的其他声明的声明),并使用赋值语句和thesubstring方法来分配子由中间middle3短语的三个字符(中间索引处的字符连同左侧的字符以及右侧的字符)。添加一个println语句来打印结果。保存,编译并运行,以测试迄今为止所做的工作。

这里是我做了什么:

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个字符,但如果有不是,请让我知道。预先感谢您的帮助!

+2

不要硬代码的中间指标。想想你将如何计算任何字符串。尝试找到一个中间索引,然后中间索引+ -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中,我使用left-middle代表2,右中代表3)。

另外需要注意的是,编写new String("asdf")既是不必要的也是不好的做法。只需使用字符串文字。

String phrase = new String ("This is a String test."); //Bad 
String phrase = "This is a String test."; //Good 
5

想想如何检索中间3个字符而不硬编码方法的边界。您可以在这方面使用length()方法。例如,一个奇数长度的字符串的中间字符总是在索引str.length()/2处,而偶数长度字符串的两个中间字符总是在索引str.length()/2(str.length()/2) - 1处。所以三个中间字符的定义将取决于你。但为了我们的好处,我们只需制作索引(str.length()/2)-1str.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”。这解释了之前的单字母输出。

+0

感谢您回答如何编码3个字母而不是1个字符以及如何确定字符串长度的详细响应。我还没有学到长度方法,这可能有帮助。这个问题确实说使用赋值语句和子字符串方法来找到3个中间字符。 –

+0

@Paraknight不客气!你有什么理由不接受答案吗?如果有什么我可以批准的,我很乐意帮忙。 –

+0

显然我只能接受一个答案,并且我对长度方法的工作方式感到困惑,但Mshnik的帖子帮助我理解了它。如果可以的话,我也会接受你的回答。由于我没有学习Length方法,我不确定它是不同的还是部分子字符串方法。 –

2

你在begind索引错误,并在字符串中结束索引,这是正确的代码:

String phrase = new String("This is a String test."); 
String middle3 = phrase.substring(11, 14); 
System.out.println("middle3: " + middle3); 
+0

这与问题的评论中指出的问题相同:硬编码索引。 – Robert

相关问题