版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunhongbing1024/article/details/82964667
1.找到英文句子中出现次数最多的单词
public class Count {
public static void main(String[] args) {
long start = System.currentTimeMillis();
String str = "Look to the skies above London and you'll see the usual suspects rainclouds, plane and pigeons. But by the end of the year, you might just see something else.";
str = str.replace('\'', ' ');//将'号用空格替换
str = str.replace(',', ' ');//将逗号用空格替换
str = str.replace('.', ' ');//将句号用空格替换
String[] strings = str.split("\\s+"); // “\\s+”代表一个或多个空格,是正则表达式
// String[] strings = str.split(" +"); // “ +”在我的机器上也能代表一个或多个空格
Map<String, Integer> map = new HashMap<String, Integer>();
List<String> list = new ArrayList<String>();//存储每个不重复的单词
for(String s : strings){
if(map.containsKey(s)){//如果map中已经包含该单词,则将其个数+1
int x = map.get(s);
x++;
map.put(s, x);
}else{ //如果map中没用包含该单词,代表该单词第一次出现,则将其放入map并将个数设置为1
map.put(s, 1);
list.add(s);//将其添加到list中,代表它是一个新出现的单词
}
}
int max=0;//记录出现次数最多的那个单词的出现次数
String maxString = null;//记录出现次数最多的那个单词的值
/*
* 从list中取出每个单词,在map中查找其出现次数
* 并没有真正排序,而只是记录下出现次数最多的那个单词
*/
for(String s : list){
int x = map.get(s);
if(x>max){
maxString = s;
max = x;
}
}
System.out.println("字符串:"+maxString+"出现次数:"+max);
long end = System.currentTimeMillis();
System.out.println("共耗时:" + (end - start) + "毫秒");
}
}
2.判断某个单词在一个句子中出现的次数,比如this在tathishahathis出现的次数
String str1 = "tathishahathis";
String str2 = "this";
int total = 0;
for (String tmp = str1; tmp != null&&tmp.length()>=str2.length();){
if(tmp.indexOf(str2) == 0){
total ++;
}
tmp = tmp.substring(1);
}
System.out.println(str1+"中含有"+total+"个"+str2);
3.利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
给定一个string iniString为待压缩的串(长度小于等于3000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。
测试样例
"aabcccccaaa"
返回:"a2b1c5a3"
"welcometonowcoderrrrr"
返回:"welcometonowcoderrrrr"
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
* 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。
* 比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
*/
public class CountNumber {
//定义一个方法,用于判断连续字母的个数
public static String zipStr(String iniString){
if(iniString == null || iniString.length()==0) {
return null;
}
StringBuilder sb = new StringBuilder();
int len = iniString.length();
for(int i=0;i<len;i++) {
int count = 1;
while((i+1)<len && iniString.charAt(i) == iniString.charAt(i+1)){
count++;
i++;
}
if(count>=1){
sb.append(iniString.charAt(i));
sb.append(count);
}else{
sb.append(iniString.charAt(i));
}
}
if(sb.length() < iniString.length()){
return sb.toString();
}
return iniString;
}
public static void main(String[] args) {
String str="welcometonowcoderrrrr";
String str2=CountNumber.zipStr(str);
System.out.println(str2);
}
}
4."this is english"倒序后为hsilgne si siht
public class ReverseString {
static String getString(String s){
StringBuilder sb=new StringBuilder();
for(int i=s.length()-1;i>=0;i--){
sb.append(s.charAt(i));
}
return sb.toString();
}
public static void main(String[] args) {
String s="this is english";
String s1=ReverseString.getString(s);
System.out.println(s1);
}
}
5.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符个数
public class CharCout {
public static void main(String[] args) {
String sourceStr = "a bba1a+";
//创建一个容器,用来保存结果,英文字母空格数组和其他字符做key,个数为value
Map<String,Integer> map = new HashMap<String,Integer>();
//循环字符串中的字符
for(int i=0;i<sourceStr.length();i++){
//获取字符串第i位的字符
String eStr = String.valueOf(sourceStr.charAt(i));
//若结果集中没有这个字符,则向结果集中增加这个字符,并初始化这个字符的值为1
if(!map.containsKey(eStr)){
map.put(eStr, 1);
}
//如果结果集中已经存在这个字符,则获取这个字符并且加1更新value值
else{
map.put(eStr,map.get(eStr)+1);
}
}
for(Map.Entry<String, Integer> entry : map.entrySet()){
System.out.println("字符 "+entry.getKey()+"的个数:"+entry.getValue());
}
}
}
6. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
/**
首先要了解中文字符有多种编码及各种编码的特征。
假设n为要截取的字节数。
**/
//第一种:
public static void main(String[] args) throws Exception{
String str = "我a爱中华abc我爱传智def';
String str = "我ABC汉";
int num = trimGBK(str.getBytes("GBK"),5);
System.out.println(str.substring(0,num) );
}
public static int trimGBK(byte[] buf,int n){
int num = 0;
booleanbChineseFirstHalf = false;
for(inti=0;i<n;i++)
{
if(buf[i]<0 && !bChineseFirstHalf){
bChineseFirstHalf = true;
}else{
num++;
bChineseFirstHalf = false;
}
}
return num;
}
//第二种:
public static void split(String source,int num)
{
int k=0;
String temp="";
for (int i = 0; i <source.length(); i++)
{
byte[] b=(source.charAt(i)+"").getBytes();
k=k+b.length;
if(k>num)
{
break;
}
temp=temp+source.charAt(i);
}
System.out.println(temp);
}
7. 阶乘n!
import java.math.BigDecimal;
import java.util.Scanner;
public class Factorial1 {
public static BigDecimal factorial(int n){
BigDecimal result = new BigDecimal(1);
BigDecimal a;
for(int i = 2; i <= n; i++){
a = new BigDecimal(i);//将i转换为BigDecimal类型
result = result.multiply(a);//不用result*a,因为BigDecimal类型没有定义*操作</span><span>
}
return result;
}
public static void main(String[] arguments){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();//读取控制台输入的整数
System.out.println(a + "!=" + factorial(a));
}
}
8.将金额小写转换为大写(后面还有两位小数)?
public class MoneyConvert
{
private final String[] str1 = {"元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"};
private final String[] str2 = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
private final String[] str3 = {"角", "分"};
public static void main(String[] args)
{
double n = 1234506.789;
MoneyConvert mc = new MoneyConvert();
String str = mc.convert(n);
System.out.println(str);
}
public String convert(double n)
{
String str = String.valueOf(n);
String temp1 = str.substring(0, str.indexOf("."));
String temp2 = str.substring(str.indexOf(".")+1);
int k = -1;
int len = -1;
StringBuffer sb = new StringBuffer();
len = temp1.length()-1;
for(int i=0; i<temp1.length(); i++)
{
k = Integer.parseInt(temp1.substring(i, i+1));
sb.append(str2[k]).append(str1[len-i]);
}
for(int i=0; i<2; i++)
{
k = Integer.parseInt(temp2.substring(i, i+1));
sb.append(str2[k]).append(str3[i]);
}
return sb.toString();
}
}
9.实现遍历磁盘中的文件(会把磁盘根目录和根目录下的所有文件都遍历出来)
public void dir(File f){
//获得当前路径下的所有文件和文件夹
File[] allFiles = f.listFiles();
//循环所有路径
for(int i = 0;i < allFiles.length;i++{
//如果是文件夹
if(allFiles[i].isDirectory()){
//递归调用
dir(allFiles[i]);
}else{ //文件
//执行操作,例如输出文件名
System.out.println(allFiles[i].getName());
}
}
}
10.假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等
/**
* 第一种方式:
* 实现思路:将字符串通过getBytes方法转换为byte数组,或者通过toCharArray()转换为char数组
* 然后先调用Arrays的sort方法进行排序,再调用Arrays的equels方法判断是否相等;
*
* @param str1
* @param str2
* @return
*/
public static boolean equels(String str1, String str2) {
byte[] sa1 = str1.getBytes();
byte[] sa2 = str2.getBytes();
Arrays.sort(sa1);
Arrays.sort(sa2);
return Arrays.equals(sa1, sa2);
}
/**
* 第二种方式:
* 实现思路:将其中一个字符串放到一个StringBuffer中,然后遍历另一个String;
* 判断另一个String的每个字符在StringBuffer中是否存在,如果有的话,删除StringBuffer中对应的第一个字符;
* 遍历结束后,查看StringBuffer的长度是否为0;
*
* @param str1
* @param str2
* @return
*/
public static boolean stringSame(String str1, String str2) {
// 先判断长度
if (str1.length() != str2.length()) {
return false;
}
// 把str2放到一个StringBuffer,
StringBuffer str2Buffer = new StringBuffer();
str2Buffer.append(str2);
// 循环字符串1的字符,查看字符串2是否有相同字符,有的话删除
for (int i = 0; i < str1.length(); i++) {
char temp = str1.charAt(i);
int index = str2Buffer.toString().indexOf(temp);
if (index != -1) {
str2Buffer.deleteCharAt(index);
} else {
return false;
}
}
// 删除结束,确认长度为0则相等
if (str2Buffer.toString().length() == 0) {
return true;
}
return false;
}
public static void main(String[] args) {
System.out.println(equels("aa23b235", "23ab235a"));
System.out.println(stringSame("aa23b2我35", "23ab235a我"));
}