字符串题(2021-6-21)

本文探讨了如何使用 Java 实现字符串的翻转操作,找出字符流中首次出现且仅出现一次的字符,以及验证数值字符串的正确格式。通过实例展示了处理字符串和字符数组的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.翻转单词序列

public class Solution{
  public String ReverseSentence(String str){
     if(str==null||str.length()==0) return str;
     char[] arr=str.toCharArray();//转换成字符串
     reverse(arr,0,arr.length-1);//先全部翻转一次
     int start=0;
     int end=0;
     while(start<arr.length){
        if(arr[start]==' '){
          start++;
          end++;
        }else if(end==arr.length||arr[end]==' '){
        reverse(arr,start,end-1);
        end++;
        start=end;
        }else{
        end++;
        }
    }
    return String.valueOf(arr);
     
  }
  private void reverse(char[] arr,int begin,int end){
  while(begin<end){
     char temp=arr[begin];
     arr[begin]=arr[end];
     arr[end]=temp;
     begin++;
     end--;
    }
  }
}

思路:1.判断字符串为空,字符串的长度为0,返回字符串。
      2.把字符串数组转换成字符串。
      3.在把字符串全部翻转一次。
      4.如果字符串为空,就继续遍历。
      5.如果最后一个字符串标记为end,并且下一个字符为空,即将这个单词翻转一次。
      6.否则就继续往后遍历。
      

2.字符流中第一个不重复字符

public class Solution{
char[] chars=new char[256];
StringBuilder sb=new StringBuilder();
   public void Insert(char ch){
   sb.append(ch);
   chars[ch]++;

  }
  public char FirstAppearingOnce(){
  char[] str=ab.toString().toCharArray();
  for(char c:str){//遍历字符串
     if(chars[c]==1){//字符串中出现的次数为1
     return c;
     }
  }
  return '#';

}
}
思路:1.创建字符数组的容量为256
      2.在创建一个StringBuilder
      3.把字符放进字符数组中
      4.遍历字符串,并把字符串数组转换成字符串
      5.字符串中出现一次的字符输出,否则输出#

3.表示数值的字符串

import java.util.*;
public class Solution{
  public boolean isNumeric(String str){
     if(str==null||str.length()==0) return false;
     boolean num=false;
     boolean dot=false;
     boolean e=false;

     char[] str1=str.trim().toCharArray();
     for(int i=0;i<str1.length;i++){
        if(str1[i]>='0'&&str1[i]<='9')
        num=true;
        else if(str1[i]=='.'){//.之前不能有.e
        
           if(dot||e)
              return false;
              dot=true;
        }
        //e之前不能有e,必须有数字
        else if(str1[i]=='e'||str1[i]=='E'){
        if(e||!num)
        return false;
        e=true;
        num=false;
        }
        else if(str1[i]=='+'||str1[i]=='-'){
        //+ - 在第一个位置,或者e后面的第一个位置
        if(1=0&&str1[i-1]!='e'&&str1[i-1]!='E')
        return false;
        }
        else{
        return false;

}
     }
     return num;
  }
}
思路:1. .之前不能有.e
      2.e之前不能有e,必须有数字
      3.+ - 第一个位置 或者e后面的第一个位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值