String字符串处理

问题描述:

请编写一个程序来处理一个只包含‘0’~‘9’以及‘a’~‘z’这36种ASCII码字符的字符串。你的程序应该对该字符串里的字符重新进行排序,并且把输入的字符串分成多段。

以下是对输出字符串的要求:

1  每一段中的字符应该是按照严格的升序。这里的排序标准是按照字符的ASCII码值(例如‘9’大于‘0’,‘z’大于‘a’)

2  第2段中的字符必须是第1段中字符的子集(可相同),第3段中的字符必须是第2段中字符的子集,依此类推,第i段的字符必须是第i-1段中字符的子集。

3  当输入字符串中含有非法字符(例如不在‘0’~‘9’以及‘a’~‘z’之间),你的程序应该输出“输入字符串非法”

输入样例:

aabbccdd

007799aabbccddeeff113355zz

1234.89898

abcdefabcdefabcdefaaaaaaaaaaaaaabbbbbbbddddddee

输出样例:

abcdabcd

013579abcdefz013579abcdefz

输入字符串非法

abcdefabcdefabcdefabdeabdeabdabdabdabdabaaaaaaa

问题分析:

将输入的字符串按规定顺序输出,因Java String类型声明后既不可更改,故可以考虑先将输入字符串转化为字符串数组,然后遍历数组并对单个字符进行处理,最后输出

题目要求——1 字符按升序排列,且数字置于字母前面;     2 字符串分段输出且后面输出的字符为前面输出字符的子集。

考虑从头到尾遍历字符串数组,将各个字符重复出现的次数分别记录至字符统计数组的对应位置,然后遍历字符统计数组,由于字符统计数组按字符升序存储字符串数组,故利用 String API中 append(char ch)函数,将各个计数位置的实际字符加入StringBuffer,每加入一个字符,将字符串统计数组对应位置元素减1,循环操作字符串统计数组直到所有位置字符重复次数均为0,结束操作,返回StringBuffer内容。

 1 package edu.fjnu.string.demo.test;
 2
 3 import java.util.Scanner;
 4
 5 //字符串处理程序
 6 //控制台读入只包含‘0’~‘9’以及‘a’~‘z’这36种ASCII码字符的字符串,对该字符串里的字符重新进行排序,并且把输入的字符串分成多段。
 7 //
 8 //(1)每一段中的字符应该是按照严格的升序。这里的排序标准是按照字符的ASCII码值(例如‘9’大于‘0’,‘z’大于‘a’)
 9 //(2)第2段中的字符必须是第1段中字符的子集(可相同),第3段中的字符必须是第2段中字符的子集,依此类推,第i段的字符必须是第i-1段中字符的子集。
10 //(3)当程序读入非法字符时直接终止
11 public class Tester {
12
13     private final static int[] COUNT_ARRAY = new int[36];// 36种ASCII码字符出现对应个数
14
15     public static void main(String[] args) {
16
17         getCountArray();// 获取字符串
18         reSort(COUNT_ARRAY);// 处理输出
19
20     }
21
22     private static String getString() {// 从控制台输入字符串
23
24         Scanner reader = new Scanner(System.in);// 读入待处理字符串
25         String input = reader.next();// 将字符串转化成字符数组
26         return input;
27     }
28
29     private static void getCountArray() {// 获得字符串数组,遍历数组并将每个字符重复次数存储于字符统计数组中
30
31         char[] Array = getString().toCharArray();
32
33         for (char c : Array) {// 统计各个字符出现的次数
34
35             if (isNumber(c)) {// 若为数字
36                 COUNT_ARRAY[c - ‘0‘]++;
37             } else if (isCharacter(c)) {// 若为字符
38                 COUNT_ARRAY[c - ‘a‘ + 10]++;
39             } else {
40                 System.out.println("输入字符串非法");
41                 System.exit(0);
42             }
43
44         }
45     }
46
47     private static void reSort(int[] arr) {// 按要求处理字符串
48         StringBuffer sb = new StringBuffer();
49         while (!isAllZero(arr)) {
50
51             for (int i = 0; i < arr.length; i++) {
52                 if (arr[i] > 0) {
53                     sb.append(getCharacter(i));// 获取第i个位置对应字符
54                     arr[i]--;
55                 }
56
57             }
58         }
59         System.out.println(sb);
60
61     }
62
63     private static char getCharacter(int i) {// 获取对应位置(0-35)字符处理函数
64         // TODO Auto-generated method stub
65         char a = ‘ ‘;
66         if (i >= 0 && i <= 9)
67             a = (char) (i + ‘0‘);
68         if (i >= 10 && i <= 35)
69             a = (char) (i + ‘a‘ - 10);
70         return a;
71     }
72
73     private static boolean isCharacter(char c) {// 判断是否为字符
74
75         if (c >= ‘a‘ && c <= ‘z‘ || c >= ‘A‘ && c <= ‘Z‘)
76             return true;
77         return false;
78     }
79
80     private static boolean isNumber(char c) {// 判断是否为数字
81         if (c >= ‘0‘ && c <= ‘9‘)
82             return true;
83         return false;
84     }
85
86     private static boolean isAllZero(int[] arr) {// 控制数组循环遍历
87         int temp = 0;
88         for (int i = 0; i < arr.length; i++) {
89             if (arr[i] == 0)
90                 temp++;
91         }
92         if (temp == arr.length)
93             return true;
94         return false;
95
96     }
97
98 }

运行结果:

输入:

abcdefabcdefabcdefaaaaaaaaaaaaaabbbbbbbddddddee

fadfa1301341

#Rda

输出:

abcdefabcdefabcdefabdeabdeabdabdabdabdabaaaaaaa

0134adf13af1

输入字符串非法

问题到此已经全部解决。

时间: 2024-08-30 16:43:20

String字符串处理的相关文章

JAVA基础——重新认识String字符串

深入剖析Java之String字符串 在程序开发中字符串无处不在,如用户登陆时输入的用户名.密码等使用的就是字符串. 在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序. 创建 String 对象有三种方法 String s1="我是字符串1"; String s2=new String();//创建一个空的字符串对象 String s3=new String("我是字符串2&q

Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str="Hello";  推荐这种 使用关键字new  String str1=new String("Hello"); 在内存中开辟2个空间 如图: 源代码 StringDemo01.java 2.String内容的比较 String str="Hello"

不使用java内置函数,将String字符串转换为int类型

package com.test; public class AtoiTest { public static void main(String[] args) throws Exception { String s = "-011134"; System.out.println("转换前的字符串:" + s); System.out.println("atoi1转换后的字符串:" + atoi1(s)); System.out.println(

ZOJ 1151 Word Reversal反转单词 (string字符串处理)

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151 For each list of words, output a line with each word reversed without changing the order of the words. This problem contains multiple test cases! The first line of a multiple input is

集合或数组转成String字符串

1.将集合转成String字符串 String s=""; for (int i = 0; i < numList.size(); i++) { if (s=="") { s=numList.get(i); }else { s=s+","+numList.get(i); } } 定义List集合,如: List<String> numList=new ArrayList<String>(); for(int i=1;

C++入门经典-例6.20-修改string字符串的单个字符

1:使用+可以将两个string 字符串连接起来.同时,string还支持标准输入输出函数.代码如下: // 6.20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string> using namespace std; int main() { string str1 = "您好,"; string str2; cout<<&

C++入门经典-例6.21-比较string字符串,比较两个字符串

1:使用">"."!=".">="等比较运算符可以比较两个字符串的内容.比较的方法是将两个string字符串从头开始比较每一个字符,直到出现两者不一致.比较这两个不相同的字符的字面值,得出相应的结果.代码如下: // 6.21.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string> u

string字符串转换为array(互换)

将string字符串转换为array数组 NSArray  *array = [Str componentsSeparatedByString:@","]; 反向方法 将array数组转换为string字符串 NSString *tempString = [mutableArray componentsJoinedByString:@","];--分隔符

String字符串处理函数

开发习惯常用字符串处理函数梳理:strtr() 转换字符串中特定的字符.substr() 返回字符串的一部分.strstr() 搜索字符串在另一字符串中的首次出现(对大小写敏感)str_replace() 替换字符串中的一些字符.(对大小写敏感)strcmp() 比较两个字符串.(对大小写敏感)strlen() 返回字符串的长度.substr_count() 计算子串在字符串中出现的次数.substr_replace() 把字符串的一部分替换为另一个字符串 implode() 把数组元素组合为一

java面试题,将String字符串转换成数字

题目要求:将String字符串转换成数字,不能用java自带的方法转换字符串,要求自己写一个atoi(String s),如果输入的不是数字则返回0. import java.util.Scanner; /** * Created by Dell on 2014/7/14. * * 面试题 * 将字符串转换成数字,不用java自带的方法 */ public class MianShi_01 { public static void main(String[] args) { Scanner in