如何在Java中打印String的中间三个字符?

时间:2016-09-25 21:35:49

标签: java string substring

我是编程和处理Java String分配的新手。问题是:

  1. 声明一个名为middle3的String类型的变量(将您的声明与其他声明放在程序顶部附近)并使用赋值语句和子串方法为中间3分配由短语的中间三个字符组成的子字符串(字符)在中间索引处以及左侧的字符和右侧的字符)。添加println语句以打印出结果。保存,编译和运行以测试到目前为止所做的工作。
  2. 这就是我所做的:

    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个字符"短语",但如果没有,请告诉我。提前感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

考虑如何在不对substring()方法的边界进行硬编码的情况下检索中间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&#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);