当前位置: 首页 > 知识库问答 >
问题:

如何在字符串中的某个位置添加字符(Java)

尉迟禄
2023-03-14

我正在创建一个程序,它接受用户输入并生成一张去音乐会的门票。为此,在其中一个文本字段中,用户输入他的全名。然后程序获取文本字段的内容并将其设置为字符串音乐会观众。为了获取用户的首字母,我使用String Tokenizer将音乐会观众拆分为firstName、middleName和lastName字符串,然后使用子字符串从每个字符串中获取第一个字母。

我希望程序能够处理例外情况,如果用户只在文本字段中输入了两个单词(e.x.名字和姓氏),那么程序会生成一个随机字母,并将其连接到姓氏和姓氏之间的字符串concertgoer,空格在其中,这样middleName就可以有一个首字母值。我试图通过处理弦乐演奏者,扫描空格并尝试用字母替换空格来实现这一点。然而,它不起作用,程序崩溃了。程序这一部分的代码如下所示,特别是在for循环中。控制台上的println语句主要仅供参考,下面是崩溃后显示的消息。

Random numCharacter2 = new Random();

String alphabet2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char addedLetter2 = alphabet2.charAt(numCharacter2.nextInt(alphabet2.length()));


for (int counter = 0; counter < concertgoer.length(); counter++) {

 char scanner = ' ';

 if (concertgoer.charAt(counter) == scanner) {

     System.out.println(scanner + "\n Hello, World");

     concertgoer = concertgoer.replace(concertgoer.charAt(scanner), addedLetter2); 

     System.out.println("New: " + concertgoer);
 }

} 


 concertgoer = concertgoer + " " + addedLetter2; 

    //! Add letter in middle of string concertgoer if only two words are entered as substitute
      //for middle name

 StringTokenizer token = new StringTokenizer(concertgoer);
 String firstName = token.nextToken();
 String middleName = token.nextToken();
 String lastName = token.nextToken();

 String firstInitial = firstName.substring(0, 1);
 String middleInitial = middleName.substring(0, 1);
 String lastInitial = lastName.substring(0, 1);

 firstInitial = firstInitial.toUpperCase();
 middleInitial = middleInitial.toUpperCase(); 
 lastInitial = lastInitial.toUpperCase();

 System.out.println(firstInitial);
 System.out.println(middleInitial);
 System.out.println(lastInitial);

 String nameInitials = firstInitial + middleInitial + lastInitial;
 nameInitials = nameInitials.replace(" ", "");
 System.out.println(nameInitials);

 //double num = Math.random();
 //Use random class and nextInt set range for any random number

Random num = new Random(); 
int randomInteger = Math.abs(num.nextInt() % 9999);
System.out.println(randomInteger);
ticketPasscode = nameInitials + randomInteger;
String message = "Your ticket passcode is: " + ticketPasscode;
messageBox(message);
System.out.println(ticketPasscode);

有人能帮我找到正确的方法吗?我感谢你的帮助。谢谢你。

*撞车事故

Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException
    at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
    at TicketPrinter.buttonClicked(TicketPrinter.java:138)
    at BreezyGUI.GBFrameButtonListener.actionPerformed(GBFrame.java:241)
    at java.awt.Button.processActionEvent(Button.java:409)
    at java.awt.Button.processEvent(Button.java:377)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

共有3个答案

林涵映
2023-03-14

这管用吗?(没测试

String insert(String input, char tbi, int index) {
    String pre = input.substring(0, index-1);
    String post = input.substring(index, input.length-1);
    return pre + tbi + post;
}

你实际上可以用它来写一句俏皮话...

鄂育
2023-03-14

你确定这条线吗?

concertgoer = concertgoer.replace(concertgoer.charAt(scanner), addedLetter2); 

这实际上会检查字符串concertgoer中的第32个字符,然后尝试替换它。这是因为char“”的计算结果实际上是int 32。你确定这就是你想要的功能吗?此外,如果concertgoer字符串少于32个字符,它将抛出异常。

符献
2023-03-14

在每次调用nextToken()之前,使用hasNextToken()检查是否真的有下一个令牌。在这一步,你有0,1,2,3,。。。串。

在这一步中,如果您有3个字符串(名字、中间名、姓氏),并且程序继续使用第一个标记作为名字,第二个标记作为中间名,第三个标记作为姓氏,那么一切都很好。

另一方面,如果在此步骤中只有两个字符串,则如您所说,为中间名分配一个随机字母,并将第一个标记分配给第一个名称,将第二个标记分配给姓氏。

从那里,你的程序继续

String firstInitial = ...
 类似资料:
  • 问题内容: 我有一个varchar字段,例如: 我需要将这些值更改为: 问题答案: 如果要添加“。” 您可以在值的最后两位数字之前执行以下操作:

  • 我有一个varchar字段,存储类似的日期 我需要将这些值更改为

  • 问题内容: 如果我有一个字符串变量: 我想在每一个前面加一个转义字符和 变量中 (即 未 竟逃脱字符),我该怎么做? 问题答案: 我不是在这里要求优雅,但我 认为 它可以满足您的要求(如果我误会了,请纠正我): 输出

  • 问题内容: 我需要一条SQL更新语句来更新所有行的特定字段,并在现有值的前面添加一个字符串“ test”。 例如,如果现有值为“ try”,则应变为“ testtry”。 问题答案: 您可以使用CONCAT函数来执行此操作: 如果您想更聪明地只更新尚未预先测试的列,请尝试

  • 问题内容: Python中是否可以使用任何函数在字符串的某个位置插入值? 像这样: 然后在位置4添加成为 问题答案: 否。Python字符串是不可变的。 但是,可以创建一个具有插入字符的新字符串:

  • 为什么我会得到异常,我如何访问某些字符串中的某些字符位置?