Java如何从键盘读入以空格为界限字符串
时间: 2024-10-14 13:11:15 浏览: 24
在Java中,你可以使用`java.util.Scanner`类来从键盘读入用户输入,然后通过`nextLine()`方法获取包含空格的完整字符串。下面是一个基本的例子:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner实例,连接到标准输入
System.out.println("请输入一个以空格分隔的字符串:");
String input = scanner.nextLine(); // 读取用户的完整一行输入
// 然后你可以按照之前提到的`split()`方法处理这个字符串,例如提取各个单词
String[] words = input.split("\\s+");
for (String word : words) {
System.out.println(word);
}
scanner.close(); // 关闭扫描器资源
}
}
```
在这个程序中,用户会被提示输入一行文本,程序会读取整行,并将其拆分为单词。每个单词会被打印出来。
相关问题
c语言读入字符char
在C语言中,有几种方式可以读入字符:
1. **fscanf** 和 `%s`[^1]:
```c
char str[20];
fscanf(stdin, "%s", str);
```
`fscanf`会读取直到遇到空格、制表符、换行符或其他分隔符为止,但不会自动停止于数组边界。因此,如果输入超过数组大小,可能会导致未初始化的内存区域被覆盖。
2. **gets**:
```c
char str1[20];
gets(str1);
```
`gets`函数会一直读取直到遇到换行符或文件结束符。它同样没有内置的字符数量限制,可能导致缓冲区溢出。
3. **fgets**:
```c
char str2[20];
fgets(str2, 20, stdin);
```
`fgets`更为安全,因为它接受一个额外的参数来指定最多能读取的字符数(包括结尾的'\0'),这样可以避免缓冲区溢出。如果输入的字符串长度大于剩余的空间,多余的字符会被截断。
注意,由于`gets()`存在安全性风险,现代C标准推荐使用`fgets()`替代。在实际编程中,应该始终关注字符数组大小和输入的界限,以防止意外的数据损坏。
词法分析程序( Lexical analyzer,简称 Lexer ),负责从左到右逐个字符地对源程序进行扫描和分解,根据语言的词法规则识别出一个个的单词符号。 因此一个词法分析程序应具备如下功能: 从左至右扫描构成源程序的字符流 识别出有词法意义的单词 返回单词记录,或词法错误信息 输入格式: 单词的类别编码编码方案为一类一种:根据单词的几大种类,为每一种类分配一个类型码,将关键字编码为1,运算符编码为2,界限符编码为3,标识符编码为4,常量编码为5。输入的源代码以“@”作为输入串结束标记。注意此处main作为关键字处理,浮点数仅考虑小数点后只有一位小数的情况。
以下是一个简单的词法分析程序示例代码:
```
#include <stdio.h>
#include <ctype.h>
#define KEYWORD 1
#define OPERATOR 2
#define DELIMITER 3
#define IDENTIFIER 4
#define CONSTANT 5
int main() {
char c;
int token_type;
char token[100];
int index = 0;
printf("Enter source code (@ to end):\n");
while((c = getchar()) != '@') {
if(isspace(c)) {
continue;
}
else if(isalpha(c)) { // identifier or keyword
token_type = IDENTIFIER;
token[index++] = c;
while((c = getchar()) != EOF) {
if(!isalnum(c)) {
ungetc(c, stdin);
break;
}
token[index++] = c;
}
token[index] = '\0';
if(strcmp(token, "main") == 0) {
token_type = KEYWORD;
}
printf("Token: %s, Type: %d\n", token, token_type);
index = 0;
}
else if(isdigit(c)) { // constant
token_type = CONSTANT;
token[index++] = c;
while((c = getchar()) != EOF) {
if(c == '.') {
token_type = CONSTANT;
token[index++] = c;
c = getchar();
if(isdigit(c)) {
token_type = CONSTANT;
token[index++] = c;
while((c = getchar()) != EOF) {
if(!isdigit(c)) {
ungetc(c, stdin);
break;
}
token[index++] = c;
}
}
else {
token_type = DELIMITER;
ungetc(c, stdin);
}
break;
}
if(!isdigit(c)) {
ungetc(c, stdin);
break;
}
token[index++] = c;
}
token[index] = '\0';
printf("Token: %s, Type: %d\n", token, token_type);
index = 0;
}
else if(c == '+' || c == '-' || c == '*' || c == '/' || c == '%' || c == '=' || c == '<' || c == '>') { // operator
token_type = OPERATOR;
token[index++] = c;
if(c == '=') {
c = getchar();
if(c == '=') {
token[index++] = c;
}
else {
ungetc(c, stdin);
}
}
token[index] = '\0';
printf("Token: %s, Type: %d\n", token, token_type);
index = 0;
}
else if(c == ';' || c == ',' || c == '(' || c == ')' || c == '{' || c == '}') { // delimiter
token_type = DELIMITER;
token[index++] = c;
token[index] = '\0';
printf("Token: %s, Type: %d\n", token, token_type);
index = 0;
}
else {
printf("Invalid character: %c\n", c);
}
}
return 0;
}
```
该程序从标准输入读入源代码,逐个字符进行识别,并输出单词符号及其类型。程序中使用了ctype库中的函数判断字符是否为字母、数字、空格等,并使用getchar和ungetc函数实现字符的读取和回退。程序判断关键字的方法是在识别出标识符后,使用strcmp函数比较是否与关键字相同。程序中还考虑了浮点数的情况,仅识别小数点后只有一位小数的浮点数。
阅读全文