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 map = new HashMap();
List list = new ArrayList();//存储每个不重复的单词
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=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 map = new HashMap();
//循环字符串中的字符
for(int i=0;i 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;inum)
{
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类型没有定义*操作
}
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
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我"));
}
11.将两个从大到小的数组,合并成一个从大到小的数组
import java.util.Arrays;
public class MergeArray {
public static void main(String[] args) {
int[] num1 = new int[]{188,123,23,11,4};
int[] num2 = new int[]{22,11,9,7,3};
//变量用于存储两个集合应该被比较的索引(存入新集合就加一)
int a = 0;
int b = 0;
int[] num3 = new int[num1.length + num2.length];
for (int i = 0; i < num3.length; i++) {
if (a < num1.length && b < num2.length) { //两数组都未遍历完,相互比较后加入
if (num1[a] > num2[b]) {
num3[i] = num1[a];
a++;
} else {
num3[i] = num2[b];
b++;
}
} else if (a < num1.length) { //num2已经遍历完,无需比较,直接将剩余num1加入
num3[i] = num1[a];
a++;
} else if (b < num2.length) { //num1已经遍历完,无需比较,直接将剩余num2加入
num3[i] = num2[b];
b++;
}
}
System.out.println("排序后:" + Arrays.toString(num3));
}
}
或者:
int[] num1 = new int[]{188,123,23,11,4};
int[] num2 = new int[]{22,11,9,7,3};
int [] num3 = new int[num1.length + num2.length];
int i=0 ,j=0,k=0;
while(i< num1.length && j=num2[j]){
num3[k++]=num1[i++];
}else {
num3[k++]=num2[j++];
}
}
while (i
12.将一个数组指定下标的值翻转,比如[1,2,3,4,5,6],start=1,end=4,则翻转结果是[1,5,4,3,2,6
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int []arr = new int[]{1,2,3,4,5,6};
reverse(arr,1,4);
System.out.println(Arrays.toString(arr));
}
public static void reverse(int[] array,int begin, int end)
{
while (end > begin)
{
int temp = array[begin];
array[begin] = array[end];
array[end] = temp;
begin++;
end--;
}
}
}
13.实现单链表的翻转【挺多公司喜欢考】
public class SingleLinkedTest {
public static void main(String[] args) {
Node head = new Node(0);
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
head.setNext(node1);
node1.setNext(node2);
node2.setNext(node3);
// 打印反转前的链表
Node h = head;
while (null != h) {
System.out.print(h.getData() + " ");
h = h.getNext();
}
// 调用反转方法
head = Reverse2(head);
System.out.println("\n**************************");
// 打印反转后的结果
while (null != head) {
System.out.print(head.getData() + " ");
head = head.getNext();
}
}
/**
* 递归,在反转当前节点之前先反转后续节点
*/
public static Node Reverse1(Node head) {
// head看作是前一结点,head.getNext()是当前结点,reHead是反转后新链表的头结点
if (head == null || head.getNext() == null) {
return head;// 若为空链或者当前结点在尾结点,则直接还回
}
Node reHead = Reverse1(head.getNext());// 先反转后续节点head.getNext()
head.getNext().setNext(head);// 将当前结点的指针域指向前一结点
head.setNext(null);// 前一结点的指针域令为null;
return reHead;// 反转后新链表的头结点
}
/**
* 利用临时变量
*/
public static Node Reverse2(Node head){
if (head == null || head.getNext() == null) {
return head;// 若为空链或者当前结点在尾结点,则直接还回
}
Node newHead = null;
Node node = head.getNext();
while(node != null){
Node temp = node;
node = newHead;
newHead = head;
head = temp;
}
return newHead;
}
}
class Node {
private int Data;// 数据域
private Node Next;// 指针域
public Node(int Data) {
// super();
this.Data = Data;
}
public int getData() {
return Data;
}
public void setData(int Data) {
this.Data = Data;
}
public Node getNext() {
return Next;
}
public void setNext(Node Next) {
this.Next = Next;
}
}
14.java多线程---顺序打印ABC的三种实现---join方法
package com.shb.test;
public class JoinTest {
public static void main(String[] args) {
ThreadA threadA = new ThreadA();
ThreadB threadB = new ThreadB(threadA);
ThreadC threadC = new ThreadC(threadB);
threadA.start();
threadB.start();
threadC.start();
}
}
class ThreadA extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("A");
}
}
class ThreadB extends Thread{
private ThreadA threadA;
public ThreadB(ThreadA threadA){
this.threadA =threadA;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
threadA.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("B");
}
}
class ThreadC extends Thread{
private ThreadB threadB;
public ThreadC(ThreadB threadB){
this.threadB =threadB;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
threadB.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("C");
}
}
15.给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1
示例:
s = "leetcode" 返回 0. s = "loveleetcode", 返回 2.
package linklist;
import java.util.HashMap;
import java.util.LinkedHashMap;
public class StringTestCount {
public static void main(String[] args) {
String str = "sttetssgh";
int index = getCharIndex(str);
System.out.println(index);
}
public static int getCharIndex(String str){
HashMap map = new HashMap<>();
int len = str.length();
for (int i= 0; i