用java实现在字符串s中找出第一个只出现一次的字符。如果没有,返回一个单空格
时间: 2023-12-14 20:36:55 浏览: 29
可以使用哈希表来实现该功能,具体步骤如下:
1. 创建一个哈希表,用于存储每个字符出现的次数。
2. 遍历字符串s,将每个字符及其出现的次数存储到哈希表中。
3. 再次遍历字符串s,找到第一个在哈希表中出现次数为1的字符,即为所求。
4. 如果没有出现次数为1的字符,则返回一个单空格。
以下是Java代码实现:
```
public static char firstUniqueChar(String s) {
if (s == null || s.length() == 0) {
return ' ';
}
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0) + 1);
}
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (map.get(c) == 1) {
return c;
}
}
return ' ';
}
```
该方法的时间复杂度为O(n),空间复杂度为O(n)。
相关问题
如下字符串:No:20031234,Name:zhangsan; No:20035678,Name:lisi使用java分别找出第一个和最后一个’a’出现的位置; 分别找出第一个和最后一个“Name”出现的位置; 判断字符串是否以“No”开头,是否以“zhangsan”结尾;判断其是否包含“5678” 判断字符串是否为空,如果不空计算字符串的长度; 分别将字符串全部转换成小写;分别将字符串全部转换成大写。 将字符串中所有的“No”全部变成“stuNo”; 取出从第5个字符开始的所有字符; 取出从第5个开始,15个结束的所有字符; 找出“lisi”的学号,将其中第4位改成9,并将其逆序显示; 将“ No:20032222,Name:wangwu ”中头尾的空格去掉,并合并到原来的字符串中。 将“No:20031111,Name:zhaoliu”插入到zhangsan和lisi信息的中间显示。
1. 找出第一个和最后一个’a’出现的位置
```java
String str = "No:20031234,Name:zhangsan; No:20035678,Name:lisi";
int firstA = str.indexOf('a');
int lastA = str.lastIndexOf('a');
System.out.println("第一个'a'出现在字符串的位置:" + firstA);
System.out.println("最后一个'a'出现在字符串的位置:" + lastA);
```
2. 分别找出第一个和最后一个“Name”出现的位置
```java
int firstName = str.indexOf("Name");
int lastName = str.lastIndexOf("Name");
System.out.println("第一个\"Name\"出现在字符串的位置:" + firstName);
System.out.println("最后一个\"Name\"出现在字符串的位置:" + lastName);
```
3. 判断字符串是否以“No”开头,是否以“zhangsan”结尾
```java
boolean startsWithNo = str.startsWith("No");
boolean endsWithZhangsan = str.endsWith("zhangsan");
System.out.println("字符串是否以\"No\"开头:" + startsWithNo);
System.out.println("字符串是否以\"zhangsan\"结尾:" + endsWithZhangsan);
```
4. 判断其是否包含“5678”
```java
boolean contains5678 = str.contains("5678");
System.out.println("字符串是否包含\"5678\":" + contains5678);
```
5. 判断字符串是否为空,如果不空计算字符串的长度
```java
if (str.isEmpty()) {
System.out.println("字符串为空");
} else {
System.out.println("字符串长度为:" + str.length());
}
```
6. 分别将字符串全部转换成小写,大写
```java
String lowerCaseStr = str.toLowerCase();
String upperCaseStr = str.toUpperCase();
System.out.println("字符串全部转换成小写:" + lowerCaseStr);
System.out.println("字符串全部转换成大写:" + upperCaseStr);
```
7. 将字符串中所有的“No”全部变成“stuNo”
```java
String replacedStr = str.replace("No", "stuNo");
System.out.println("将字符串中所有的\"No\"全部变成\"stuNo\":" + replacedStr);
```
8. 取出从第5个字符开始的所有字符
```java
String subStr1 = str.substring(4);
System.out.println("从第5个字符开始的所有字符:" + subStr1);
```
9. 取出从第5个开始,15个结束的所有字符
```java
String subStr2 = str.substring(4, 19);
System.out.println("从第5个开始,15个结束的所有字符:" + subStr2);
```
10. 找出“lisi”的学号,将其中第4位改成9,并将其逆序显示
```java
int lisiIndex = str.indexOf("lisi");
String lisiNo = str.substring(lisiIndex - 11, lisiIndex - 1);
String reversedLisiNo = new StringBuilder(lisiNo).reverse().toString();
String modifiedLisiNo = lisiNo.substring(0, 3) + "9" + lisiNo.substring(4);
System.out.println("lisi的学号为:" + lisiNo);
System.out.println("将其中第4位改成9后的学号为:" + modifiedLisiNo);
System.out.println("逆序显示的学号为:" + reversedLisiNo);
```
11. 将“ No:20032222,Name:wangwu ”中头尾的空格去掉,并合并到原来的字符串中
```java
String str2 = " No:20032222,Name:wangwu ";
str2 = str2.trim();
str = str + str2;
System.out.println("去掉头尾空格并合并后的字符串为:" + str);
```
12. 将“No:20031111,Name:zhaoliu”插入到zhangsan和lisi信息的中间显示
```java
String insertStr = ", No:20031111,Name:zhaoliu";
int zhangsanIndex = str.indexOf("zhangsan");
int lisiIndex = str.indexOf("lisi");
str = str.substring(0, zhangsanIndex) + insertStr + str.substring(zhangsanIndex, lisiIndex) + insertStr + str.substring(lisiIndex);
System.out.println("将\"No:20031111,Name:zhaoliu\"插入到zhangsan和lisi信息的中间显示:" + str);
```
用Java从键盘上输入n组整数,找出每组中最大的素数。第一行输入一个整数n,表示后面将输入n行整数,每行的整数为若干。要求使用BufferedReader和BufferedWriter
以下是使用BufferedReader和BufferedWriter实现从键盘上输入n组整数,找出每组中最大的素数的Java代码:
```java
import java.io.*;
public class Main {
public static boolean isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
String[] nums = br.readLine().split(" ");
int maxPrime = Integer.MIN_VALUE;
for (String num : nums) {
int currNum = Integer.parseInt(num);
if (isPrime(currNum) && currNum > maxPrime) {
maxPrime = currNum;
}
}
bw.write(maxPrime + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
```
代码解释:
1. `isPrime`方法用于判断一个数是否为素数,如果是素数返回true,否则返回false。
2. `main`方法中,首先使用BufferedReader读取输入的n,然后使用for循环读取每一行的整数。
3. 对于每一行的整数,使用split方法将其分割成字符串数组,然后遍历每个字符串,将其转换成整数。
4. 如果当前整数是素数且大于之前的最大素数,就将最大素数更新为当前整数。
5. 最后使用BufferedWriter输出每组的最大素数。
注意事项:
1. 输入的每行整数之间必须用空格隔开。
2. 输出时每组的最大素数和下一组的整数之间必须用换行符隔开。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)