首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在javascript中拆分字符串?

如何在javascript中拆分字符串?
EN

Stack Overflow用户
提问于 2017-05-25 15:17:22
回答 3查看 908关注 0票数 0

我有一个文本文件,其中包含日期和相应事件的列表,如下所示:

代码语言:javascript
运行
复制
txt:
2017-05-01: All Day Event:
2017-05-06: Day Event:
2017-05-15: abc Event:
2017-06-05: All Event:
2017-06-03: Al Event:

首先,我使用一个简单的拆分函数来拆分文本文件的内容。

代码语言:javascript
运行
复制
var text=xmlhttp.responseText;
var amber=text.split(':');

在琥珀数组中,同时存储每个日期和事件,我需要做的是单独访问日期,并拆分日、月和年,我尝试使用以下代码

代码语言:javascript
运行
复制
var stwo="";

for (var i = 0; i < amber.length; i += 2) {
  stwo = amber[i].split('-');
}

但是,当我尝试访问stwo[]的内容时,它显示为“未定义”,我也尝试过这样声明stwo

代码语言:javascript
运行
复制
 stwo=[" "," "];

因为我认为stwo没有定义为数组,我做错了什么?有没有别的办法可以把日期分成两部分?

这是我的完整代码。

代码语言:javascript
运行
复制
   <!DOCTYPE HTML>
   <html>
   <head>
   <meta http-equiv="X-UA-Compatible" content="IE=edge" />
   <meta http-equiv='Content-Type' content='text/html;charset=UTF-8' />
    <title>SAPUI5 EVENT CALENDAR</title>
    <script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
    id="sap-ui-bootstrap" data-sap-ui-libs="sap.m,sap.ui.layout,sap.me"
    data-sap-ui-xx-bindingSyntax="complex"
    data-sap-ui-theme="sap_bluecrystal"></script>

    <script>


    jQuery.sap.require("sap.me.Calendar");
    jQuery.sap.require("sap.m.RadioButton");
    calendar = new sap.me.Calendar({

    firstDayOffset : 1

     });

    var xmlhttp,text;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open('GET','C:/Users/Manimaran/Desktop/project/nn.txt',false);
    xmlhttp.send();
    var text=xmlhttp.responseText;
    var amber=text.split(':');


    for (var t = 0; t < amber.length; t+=2) 
    {
     calendar.toggleDatesType([amber[t]],sap.me.CalendarEventType.Type07, 
     true);
    //document.write(a[i+1]+"<br>");
     }

     calendar.toggleDatesType([ "2017/05/15" ], 
     sap.me.CalendarEventType.Type07,
        true);

    var msgLabel = new sap.m.Label({
    width : "100%"
   });
    calendar.attachTapOnDate(function(oEvent) {

    /* date=oEvent.getParameters().date;
     msgLabel.setText(date)*/
   });
   calendar.attachChangeCurrentDate(function(oEvent) {


    var stwo=[" "," "];

    for (var i=0;i<amber.length;i+=2)
        {
        stwo=amber[i].split('-');
        }

    /*for (var j=1;j<stwo.length;j+=3)
        {

        switch(stwo[j]){
        case '01' : stwo[j]="Jan"; 
        break;
        case '02' : stwo[j]="Feb"; 
        break;
        case '03' : stwo[j]="Mar"; 
            break;
        case '04' : stwo[j]="Apr"; 
            break;
        case '05' : stwo[j]="May"; 
            break;
        case '06' : stwo[j]="Jun"; 
            break;
        case '07' : stwo[j]="Jul"; 
            break;
        case '08' : stwo[j]="Aug"; 
            break;
        case '09' : stwo[j]="Sep"; 
            break;
        case '10' : stwo[j]="Oct"; 
            break;
        case '11' : stwo[j]="Nov"; 
            break;
        case '12' : stwo[j]="Dec"; 
            break;
        default:"gokka makka";  
            }
        }*/
        var comp=oEvent.getParameters().currentDate;
        var tmp=comp.split(' ');
        if(tmp[1]==tmp[1]){
            msgLabel.setText(stwo);     
                alert(stwo[1]);
        }else{
            alert('error');

        }


        });

var unselectBtn = new sap.m.Button({
    text : "unselect all",
    press : function() {
        var aDates = calendar.getSelectedDates();
        calendar.unselectAllDates();
        msgLabel.setText("unselected " + aDates.length + " dates");
        alert(text);
    }
});


var app = new sap.m.App();
var page = new sap.m.Page({
    headerContent : unselectBtn,
    content : [ calendar, new sap.m.Label({
        width : "100%",
        text : "Messages log"
    }), msgLabel]
});

// Colgate: weeks start on sunday, and show 2 months
calendar.setSingleRow(false);
calendar.setMonthsToDisplay(1);
//  calendar.setWeeksPerRow(1);
calendar.setMonthsPerRow(1);
calendar.setFirstDayOffset(0);
app.addPage(page);
app.placeAt('content');


</script>
</head>
<body class='sapUiBody'>
<div id='content'></div>
<p id="display"></p>
</body>
</html>
EN

回答 3

Stack Overflow用户

发布于 2017-05-25 15:29:08

您可以像这样解析每个日志行:

代码语言:javascript
运行
复制
// ES6
const txt = `
2017-05-01: All Day Event:
2017-05-06: Day Event:
2017-05-15: abc Event:
2017-06-05: All Event:
2017-06-03: Al Event:
`
const amber = txt.trim().split('\n');
const logDates = amber.map(line => line.split(':')[0]);
const logDatesSplitted = logDates.map(logDate => logDate.split('-'));

console.log(logDatesSplitted);

// ES5: Fast Splitting by colon
var amber_ = txt.trim().split(':');
var logDates_ = [];

for(var i = 0; i < amber_.length; i += 2) {
  if(amber_[i] == "") continue; // filter out last empty log record;
  var logDate = amber_[i].trim().split('-');
  logDates_.push(logDate);
}
console.log(logDates_);

票数 0
EN

Stack Overflow用户

发布于 2017-05-25 15:41:56

您每次都只是将该值赋给stwo

所以最后一个拆分值之前的所有拆分值都将丢失。

此外,split(':')中的最后一个字符串将为空,因为在最后一个:之后,给定字符串中没有任何内容。

因此,最终不会为stwo分配任何内容。

检查此代码段

代码语言:javascript
运行
复制
var text = "2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:";
var amber = text.split(':');
var stwo;
console.log(amber);
for (var i = 0; i < amber.length; i += 2) {
  if (amber[i] != "") {
    stwo = amber[i].split('-');
  }
}

console.log(stwo);

如果您可以看到,即使检查空字符串..只有最后的日期会被拆分并添加到变量stwo中。

要存储每个拆分值,可以在数组中使用数组(MultiDimesional数组)

代码语言:javascript
运行
复制
var text = "2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:";
var amber = text.split(':');
var stwo = new Array();
console.log(amber);
var j = 0;
for (var i = 0; i < amber.length; i += 2) {
  if (amber[i] != "" && amber[i].indexOf('-') > 1) {
    stwo[j] = amber[i].split('-');
    j++;
  }
}

console.log(stwo);

票数 0
EN

Stack Overflow用户

发布于 2017-05-25 15:50:39

查看此内容

代码语言:javascript
运行
复制
var test = '2017-05-01: All Day Event:2017-05-06: Day Event:2017-05-15: abc Event:2017-06-05: All Event:2017-06-03: Al Event:';
test = test.replace(/:+$/g,"");
var test1 = test.split(':');

var test2 = [];

for (var i = 0; i < test1.length; i += 2) {
  test2.push(test1[i].split('-'));
  //console.log(test2);
}

console.log(test2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44174538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档