我正在创建一个ImageViewer应用程序,它会提示用户使用showInputDialog
首先输入第一个图像文件名的名称。但是,我因使用String
而无法拆分split()
。例如,用户输入 image1.gif ,我必须确保我可以将它们分成三个元素。首先是图像,然后是 1 ,最后是 gif 。所以你们认为你可以帮助我吗?提前谢谢!
public static void main(String [] args)
{
//First input dialog. Example from user will be like: image1.gif
String userInput = JOptionPane.showInputDialog("Please input name of first image file");
Scanner myScanner = new Scanner(userInput);
String a = userInput.split(".");
String fileName = myScanner.next();
String fileNumber = myScanner.next();
String fileFormat = myScanner.next();
}
这是试用部分。但它表示Array索引超出了绑定范围。有什么建议吗?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
class TestImageViewer {
public static void main(String [] args)
{
//First input dialog. Example from user will be like: image1.gif
String userInput = JOptionPane.showInputDialog("Please input name of first image file");
Scanner myScanner = new Scanner(userInput);
String[] a = userInput.split(".");
System.out.println(a[0]);
}
}
答案 0 :(得分:2)
您分割到的内容必须返回到数组以存储拆分的String的所有部分。所以,像这样:
String[] a = userInput.split(".");
a[0]
将保留 Image1 ,a[1]
将保留 gif 。知道了这一点,你就可以得到数组第一个索引的字母,如下所示:
String number = a[0].replaceAll("[^0-9.]", "");
和数字如:
String letter = a[0].replaceAll("[0-9.]", "");
这些是正则表达式函数,可能很好地了解一下。
编辑:为了回应OP的编辑,我想我没有把我的代码放在上下文中。这是完整的代码:public static void main(String [] args) {
//First input dialog. Example from user will be like: image1.gif
String directions = JOptionPane.showInputDialog("Please input name of first image file");
// System.in will set up the scanner to read user input from the keyboard.
// myScanner.next() will grab the first "token" (a section of text without spaces) from this input
Scanner myScanner = new Scanner(System.in);
// Create variables to store name, number and extension
String letters, number, ext;
String fileName = myScanner.next();
if (fileName.indexOf(".") > -1) {
String[] a = userInput.split(".");
letter = a[0].replaceAll("[0-9.]", "");
number = a[0].replaceAll("[^0-9.]", "");
ext = a[1];
}
}
但是,您似乎并没有掌握在Java中使用Scanner
类的一些基础知识。希望这会有所帮助,但请尝试查看其他示例。
答案 1 :(得分:2)
您可以尝试使用正则表达式和Matcher
来提高输入文件模式的灵活性:
Pattern pattern = Pattern.compile("(.+)(\\d+)\\.(\\w+)");
Matcher matcher = pattern.matcher("image1.gif");
if(matcher.find()) {
String fileName = matcher.group(1);
String fileNumber = matcher.group(2);
String fileFormat = matcher.group(3);
}
(.+)(\\d+)\\.(.+)
表示由一个或多个字符组成的模式,后跟一个或多个数字,然后是一个点,最后是一个或多个表示文件扩展名的单词字符。其中每一个都在括号内的小组中捕获。
matcher.group(1)
返回image
(.+)
matcher.group(2)
返回1
(\\d+)
matcher.group(3)
返回gif
(\\w+)
答案 2 :(得分:1)
split
返回一个包含字符串不同部分的数组。因此,如果您使用.
作为分隔符,则至少需要提供一个将通过调用split
来设置的数组。其次,您可能想尝试另一种查找fileNumber
的方法,因为您的文件似乎没有格式化为 image.1.gif 。