我正在创建一个程序,它接受用户输入并生成一张去音乐会的门票。为此,在其中一个文本字段中,用户输入他的全名。然后程序获取文本字段的内容并将其设置为字符串音乐会观众。为了获取用户的首字母,我使用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)
这管用吗?(没测试)
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;
}
你实际上可以用它来写一句俏皮话...
你确定这条线吗?
concertgoer = concertgoer.replace(concertgoer.charAt(scanner), addedLetter2);
这实际上会检查字符串concertgoer中的第32个字符,然后尝试替换它。这是因为char“”的计算结果实际上是int 32。你确定这就是你想要的功能吗?此外,如果concertgoer字符串少于32个字符,它将抛出异常。
在每次调用nextToken()
之前,使用hasNextToken()
检查是否真的有下一个令牌。在这一步,你有0,1,2,3,。。。串。
在这一步中,如果您有3个字符串(名字、中间名、姓氏),并且程序继续使用第一个标记作为名字,第二个标记作为中间名,第三个标记作为姓氏,那么一切都很好。
另一方面,如果在此步骤中只有两个字符串,则如您所说,为中间名分配一个随机字母,并将第一个标记分配给第一个名称,将第二个标记分配给姓氏。
从那里,你的程序继续
String firstInitial = ...
问题内容: 我有一个varchar字段,例如: 我需要将这些值更改为: 问题答案: 如果要添加“。” 您可以在值的最后两位数字之前执行以下操作:
我有一个varchar字段,存储类似的日期 我需要将这些值更改为
问题内容: 如果我有一个字符串变量: 我想在每一个前面加一个转义字符和 变量中 (即 未 竟逃脱字符),我该怎么做? 问题答案: 我不是在这里要求优雅,但我 认为 它可以满足您的要求(如果我误会了,请纠正我): 输出
问题内容: Python中是否可以使用任何函数在字符串的某个位置插入值? 像这样: 然后在位置4添加成为 问题答案: 否。Python字符串是不可变的。 但是,可以创建一个具有插入字符的新字符串:
问题内容: 我需要一条SQL更新语句来更新所有行的特定字段,并在现有值的前面添加一个字符串“ test”。 例如,如果现有值为“ try”,则应变为“ testtry”。 问题答案: 您可以使用CONCAT函数来执行此操作: 如果您想更聪明地只更新尚未预先测试的列,请尝试
为什么我会得到异常,我如何访问某些字符串中的某些字符位置?