JavaScript字符串的练习
程序员文章站
2024-03-26 11:45:29
...
所有都定义函数==
1. 传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数。
------
2. 反转字符串.
传入:"iOS Android HTML5 Java"
返回:"avaJ 5LMTH diordnA SOi"
------
3. 去除字符串首尾空格.(写一个自定义的 trim 函数)
------
4. 创建一个长度为5-10, 内容为数字字母下滑线的随机字符串.
------
5. 验证字符串:长度4-16; 只能包含数字、英文字符、下划线三种符号; 首字符不能是数字";
------
6. 将字符中单词用空格隔开
已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开
只保留第一个单词的首字母大写
传入:"HelloMyWorld"
6.
1. 传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数。
------
2. 反转字符串.
传入:"iOS Android HTML5 Java"
返回:"avaJ 5LMTH diordnA SOi"
------
3. 去除字符串首尾空格.(写一个自定义的 trim 函数)
------
4. 创建一个长度为5-10, 内容为数字字母下滑线的随机字符串.
------
5. 验证字符串:长度4-16; 只能包含数字、英文字符、下划线三种符号; 首字符不能是数字";
------
6. 将字符中单词用空格隔开
已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开
只保留第一个单词的首字母大写
传入:"HelloMyWorld"
返回:"Hello my world"
---------------------------------------------------------------
当然,今天用的方法是锻炼思维的,去除正则表达式去写。
1.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--题目:传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数-->
<script>
//全局变量
var lowerNum=0;
var uperNum=0;
var number=0;
var others=0;
//统计字符串的各个符号的数量函数
//一个小小的知识点需注意:字符串比较更倾向于转换成数字进行比较,只有两个操作数都是字符串的时候才会进行ASCII码转换进行比较
function statistics(str) {
for(var i=0;i<str.length;i++){
var char=str.charAt(i);
if(char >="a" && char <= "z"){
lowerNum++;
}else if(char >="A" && char <= "Z"){
uperNum++;
}else if(char >= 0 && char <= 9){
number++;
}else{
others++;
}
}
}
var str=prompt("Please input your string that your want.");
statistics(str);
console.log("你输入的字符串为: " + str);
console.log("小写字母的个数: " + lowerNum);
console.log("大写字母的个数: " + uperNum);
console.log("数字类型的个数: " + number);
console.log("其他符号的个数: " + others);
</script>
</body>
</html>
其实我们不应该用全局变量去搞,我们如果要传出数据,应该优先考虑对象或者数组输出,这样的想法应该培养。
另解:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
// 1. 传入任意字符串,统计字符串中的大写字母个数、小写字母个数、数字个数、其他字符个数。
function counts(s){
// 大写字母的个数, 小写字母的的个数, 数字的个数, 其他字符的个数
// var cs = [0, 0, 0, 0];
var cs = {
upperCase: 0,
lowerCase: 0,
number: 0,
other: 0
}
for (var c of s){
if (c >= "A" && c <= "Z"){
// cs[0]++;
cs.upperCase++;
}else if (c >= "a" && c <= "z"){
// cs[1]++;
cs.lowerCase++;
}else if (c >= "0" && c <= "9"){
// cs[2]++;
cs.number++;
}else{
// cs[3]++;
cs.other++;
}
}
return cs;
}
console.log(counts("fAKJHKHKHKIfjlasdjfoeur93932980?..,,uui]]][[\\"));
</script>
</body>
</html>
2.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--题目:反转字符串.
传入:"iOS Android HTML5 Java"
返回:"avaJ 5LMTH diordnA SOi"
-->
<script>
//反转字符串的函数,先切片成数组,在数组链接字符串
function reversalString(str) {
var arr=str.split("");
var newArr = arr.reverse();
var getString = newArr.join("");
return getString;
}
// var str="iOS Android HTML5 Java";
var str=prompt("我们将会把输入的字符串进行反转,很厉害哟~快来试试吧")
console.log(reversalString(str));
</script>
</body>
</html>
我们可以合并这些API:
<script>
/*2. 反转字符串.
传入:"iOS Android HTML5 Java"
返回:"avaJ 5LMTH diordnA SOi"*/
function reverse(s){
return s.split("").reverse().join("");
}
console.log(reverse("abc"));
</script>
3.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<!--题目:去除字符串首尾空格.(写一个自定义的 trim 函数)-->
<body>
<script>
function selfDefinedTrim(str) {
var arr = str.split("");
//头部清空格
while (arr[0].toString().charCodeAt()==32){
arr.splice(0,1);
}
//尾部清空格
while (arr[arr.length-1].toString().charCodeAt()==32){
arr.splice(arr.length-1,1);
}
return arr.join("");
}
//测试实例
var str=" u1234 u iu ";
console.log(selfDefinedTrim(str));;
</script>
</body>
</html>
另解用for循环,我们字符串的遍历和数组是一样的:
<script>
//3. 去除字符串首尾空格.(写一个自定义的 trim 函数, 不能使用s.trim())
// " fljl jflj "
function myTrim(s){
var start, end;
for (var i = 0; i < s.length; i++){
if (s[i] != " " && s[i] != "\n" && s[i] != "\t"){
start = i;
break;
}
}
for (var i = s.length - 1; i >= 0; i--){
if (s[i] != " " && s[i] != "\n" && s[i] != "\t"){
end = i + 1;
break;
}
}
// return s.substring(start, end);
return s.slice(start, end);
}
console.log("zzz" + myTrim(" \n \t ldfjlsdjfabc sdlfjdls\n \t ") + "zzz");
</script>
4.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--创建一个长度为5-10, 内容为数字字母下滑线的随机字符串.-->
<script>
//自定义随机数函数
function randomNum(m,n) {
return parseInt(Math.random()*(n-m+1)+m);
}
//生成随机字符串的函数
function randomString() {
//备选字符数组集
var arr=["_"];
for(var i=0;i<=9;i++){
arr.push(i+"");
}
for(var i=97;i<=122;i++){
arr.push(String.fromCharCode(i));
arr.push(String.fromCharCode(i-32));
}
//生成字符串
var s="";
for(var i=0;i<=randomNum(5,10);i++){
s+=arr[randomNum(0,arr.length-1)];
}
return s;
}
console.log(randomString());
</script>
</body>
</html>
5.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<!--题目:验证字符串:长度4-16; 只能包含数字、英文字符、下划线三种符号; 首字符不能是数字";-->
<body>
<script>
var inputString=prompt("input your keywords,and verify: ");
if(verify(inputString)){
alert("The password you entered is successful.");
}else{
alert("The password you entered failed, please Re-enter.");
}
//一个根节点验证函数
function verify(s) {
if(s.length < 4 || s.length > 16){
return false;
}
if(include(s)){
return true;
}else{
return false;
}
}
//专门检测字符串中是否只包括数字字母下划线,并且检测是否数字开头,分支验证
function include(s) {
if(s[0]>=0 || s[0]<=9){
return false;
}
for(var i=0;i<s.length;i++){
var temp=s.charCodeAt(i);
if(temp==95||(temp>=48&&temp<=57)||(temp>=65&&temp<=90)||(temp>=97&&temp<=122)){
}else{
return false;
}
}
return true;
}
</script>
</body>
</html>
另外的写法:
<script>
function validate(s){
// 先把一些不满足的给排除掉, 可以最大限度的降低嵌套
// 如果长度小于4或者小于16 直接认为验证没有通过
if (s.length < 4 || s.length > 16) return false;
if (s[0] >= "0" && s[0] <= "9") return false;
for (var c of s){
if (!((c >= "0" && c <= "9")
|| (c.toLowerCase() >= "a" && c.toLowerCase() <= "z")
|| (c == "_"))){
return false;
}
}
return true;
}
console.log(validate("abc1你好"));
</script>
6.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--将字符中单词用空格隔开
已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开
只保留第一个单词的首字母大写
传入:"HelloMyWorld"
返回:"Hello my world"
-->
<script>
//改变字符串函数(增加空格和该首字母成小写)
function changeString(str) {
var arr=str.split("");
for(var i=1;i<arr.length;i++){
if(arr[i]>="A" && arr[i]<="Z"){
arr.splice(i,1," ",arr[i].toString().toLowerCase());
}
}
return arr.join("");
}
//测试用例
var str="HelloMyWorld";
console.log(changeString(str));
</script>
</body>
</html>
这种写法是有bug的,比如 Hello Hy Horld 就会输出 hello hy world.
另解:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
/*6. 将字符中单词用空格隔开
已知传入的字符串中只有字母,每个单词的首字母大写,请将每个单词用空格隔开
只保留第一个单词的首字母大写
传入:"HelloMyWorld" // Hello m
返回:"Hello my world"
*/
function foo(s){
/* for (var i = 1; i < s.length; i++){
if (s[i] >= "A" && s[i] <= "Z"){
s = s.replace(s[i], " " + s[i].toLowerCase());
}
}
return s;*/
var temp = "";
var start = 0; // 每次截取的开始的位置
for (var i = 1; i < s.length; i++){
if (s[i] >= "A" && s[i] <= "Z"){ // M
temp += s.slice(start, i) + " " + s[i].toLowerCase();
start = i + 1;
}
}
temp += s.slice(start);
return temp;
}
console.log(foo("HelloHyHorld"));
</script>
</body>
</html>
上一篇: 树莓派3B+指南(九)解决帧率不足的问题
下一篇: 15_Android性能优化
推荐阅读
-
JavaScript调用其他函数中的变量
-
JavaScript字符串的练习
-
02 - JavaScript(获取元素的其他方式,字符串拼接,数据类型)
-
JavaScript 构造函数继承的几种方式
-
Javascript的回调函数其他函数解释
-
JavaScript中的局部函数
-
java统计出字符串中的英文字母,空格,数字和其他字符的个数 博客分类: Java编程 java统计字符数字个数
-
计算二进制字符串01010101中"1"的个数 博客分类: Java基础 java二进制字符串01010101个数
-
JavaScript算法系列--leetcode盛最多水的容器
-
1分钟带你了解JavaScript函数的定义