Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java子字符串方法的问题_Java_String_Substring - Fatal编程技术网

Java子字符串方法的问题

Java子字符串方法的问题,java,string,substring,Java,String,Substring,我编写了一个程序,提示用户先输入全名、中间名、最后名。我试图通过定位字符串中的每个空格,使用substring方法将该名称分解为三个单独的部分。找到每个空格后,名称的以下部分将存储在新的字符串变量中 我遇到的问题是,中间名同时存储中间名和最后名,因为计数器没有正确停止,您将在下面的代码中看到这一点,所以我的问题是如何解决这个问题 请注意,我不想分割字符串,我不想使用StringTokenizer,我不想使用数组,我已经知道如何这样做。我所需要知道的就是如何修复我的计数器,我正在尝试的工作将以这种

我编写了一个程序,提示用户先输入全名、中间名、最后名。我试图通过定位字符串中的每个空格,使用substring方法将该名称分解为三个单独的部分。找到每个空格后,名称的以下部分将存储在新的字符串变量中

我遇到的问题是,中间名同时存储中间名和最后名,因为计数器没有正确停止,您将在下面的代码中看到这一点,所以我的问题是如何解决这个问题

请注意,我不想分割字符串,我不想使用StringTokenizer,我不想使用数组,我已经知道如何这样做。我所需要知道的就是如何修复我的计数器,我正在尝试的工作将以这种方式进行,我不是在寻找一种新的方式来实现这一点;我只使用子字符串和charAt

import java.util.Scanner;

public class Example 
{
  public static void main(String[] args)
  {
    String name = "", 
           firstName = "",
           middleName = "",
           lastName = ""; 

    Scanner in = new Scanner(System.in);       

           System.out.print("Please enter your name 'First Middle Last': "); 
           name = in.nextLine();



           int i = 0; 

  while(i < name.length())
  {   
      if(name.charAt(i) == ' ')
      {
           firstName = name.substring(0, i); // Starts at 0 ends at first occurence of ' '

         /* middleName = name.substring(i + 1, i); Should start at i + 1, 
            or one postion after the previously located white space and 
            then end at the next occurence of ' '

           ^ The above does not work, and this is where the issue is      
             happening, how ever if I do the following */

             middleName = name.substring(i + 1, name.length()); 

           /* This does work but because the endIndex is name.length() it  
               runs the length of name and grabs both the middle and last name.*/   
                     i = name.length();


             }
                ++i;
           } 



    System.out.print("\nDisplayed with last name first: " + "\nLast Name: " + lastName + "\nFisrt Name: " + firstName + "\nMiddle Name: " + middleName);

  }

}
如您所见,第一个名称显示正确。
中间名不是因为它包含“Last”而不仅仅是“Middle”

而不是
子字符串
您可以使用
拆分功能:

String string = "Peter Ralph Joseph"; //Here the string
String[] parts = string.split(" "); //Here the string it is divide taking as reference the space
System.out.println(parts[0]); //Peter
System.out.println(parts[1]); //Ralph
System.out.println(parts[2]); //Joseph

在我看来,使用
split
函数更容易、更快。

而不是
子字符串
您可以使用
split
函数:

String string = "Peter Ralph Joseph"; //Here the string
String[] parts = string.split(" "); //Here the string it is divide taking as reference the space
System.out.println(parts[0]); //Peter
System.out.println(parts[1]); //Ralph
System.out.println(parts[2]); //Joseph

在我看来,使用
split
函数更容易、更快。

您可以使用
indexOf(“”)
lastIndexOf(“”)
来查找第一个空格和最后一个空格

  • 第一个空格前的所有内容都是
    firstname
  • 最后一个空格后的所有内容都是
    lastname
  • 中间的是<代码>中间名< /代码>
伪代码:

firstName = name.substring(0, name.indexOf(' '));
middleName = name.substring(name.indexOf(' ') + 1, name.lastIndexOf(' '));
lastName = name.substring(name.lastIndexOf(' ') + 1);

您可以使用
indexOf(“”)
lastIndexOf(“”)
查找第一个空格和最后一个空格

  • 第一个空格前的所有内容都是
    firstname
  • 最后一个空格后的所有内容都是
    lastname
  • 中间的是<代码>中间名< /代码>
伪代码:

firstName = name.substring(0, name.indexOf(' '));
middleName = name.substring(name.indexOf(' ') + 1, name.lastIndexOf(' '));
lastName = name.substring(name.lastIndexOf(' ') + 1);

如果您确实想使用
子字符串
,您可以执行以下操作,而不是使用
字符运行循环:

int firstSpace = fullName.indexOf(' ');
String firstName = fullName.substring(0, firstSpace);

int secondSpace = fullName.indexOf(' ', firstSpace+1);
String middleName = fullName.substring(firstSpace+1, secondSpace);

String lastName = fullName.substring(secondSpace+1);

如果您确实想使用
子字符串
,您可以执行以下操作,而不是使用
字符运行循环:

int firstSpace = fullName.indexOf(' ');
String firstName = fullName.substring(0, firstSpace);

int secondSpace = fullName.indexOf(' ', firstSpace+1);
String middleName = fullName.substring(firstSpace+1, secondSpace);

String lastName = fullName.substring(secondSpace+1);
var模式=0;
var last=0;
对于(i=0;i
var模式=0;
var last=0;

对于(i=0;i按以下方式进行: 无需运行while循环

firstName=name.substring(0,name.indexOf(' '));
 middleName=name.substring(name.indexOf(' ')+1,name.lastIndexOf(' '));
 lastName=name.substring(name.lastIndexOf(' ')+1,name.length());

按以下方式进行: 无需运行while循环

firstName=name.substring(0,name.indexOf(' '));
 middleName=name.substring(name.indexOf(' ')+1,name.lastIndexOf(' '));
 lastName=name.substring(name.lastIndexOf(' ')+1,name.length());

你没有抓住重点,这与效率或更简单的东西无关。我使用的是子字符串,我没有像我所说的那样使用split或stringTokenizer等。我问了一个简单的问题。如何修复计数器lol@Afflicted哦,对不起。然后您可以使用
indexOf(“”);
引用第一个空格和
lastIndexOf(' ')
找到@radoh在回答中所说的最后一个空格。无论如何,我认为你应该使用其他函数来获得这种行为,而不是
子字符串
。你没有抓住要点,这与效率或更简单的事情无关。我使用的是子字符串,我没有使用split或stringTokenizer等。我问了一个简单的问题我该怎么修柜台lol@Afflicted哦,对不起。然后您可以使用
indexOf(“”);
引用第一个空格和
lastIndexOf(“”)
查找@radoh在回答中所说的最后一个空格。无论如何,我认为您应该使用其他函数来获得此行为,而不是
子字符串。
。感谢您的回复,当您最初发表评论时,我直接转到java文档,得出结论您是正确的!感谢您的回复,以及更多关于此问题的信息谢谢你是这里唯一一个真正决定给我我需要的信息,而不是我特别说我不需要的信息的人!没问题,很高兴为你提供帮助谢谢你的回复,当你最初发表评论时,我直接浏览了java文档,得出的结论是你是正确的!谢谢你的回复,以及更多关于你是唯一一个决定给我需要的信息的人,而不是我所说的我不需要的信息!没问题,很乐意帮忙。请考虑一下这个价值。请考虑价值。