Java split无法按预期为string“运行--&引用;

Java split无法按预期为string“运行--&引用;,java,regex,Java,Regex,我试图将基于字符串“-”的段落拆分成一行,该段落如下所示。如果一行只包含“--”,我就必须中断,但我不能基于该行进行拆分,因为我有一些其他限制 Hi Hello this is -- to test -- java split function -- test 预期产出 ["Hi Hello this is -- to test", "java split function -- test"] 我尝试了下面的代码,但没有成功 searchValue.split("--") 及 他们两人

我试图将基于字符串“-”的段落拆分成一行,该段落如下所示。如果一行只包含“--”,我就必须中断,但我不能基于该行进行拆分,因为我有一些其他限制

Hi Hello this is -- to test

--

java split function -- test
预期产出

["Hi Hello this is -- to test", "java split function -- test"]
我尝试了下面的代码,但没有成功

searchValue.split("--")

他们两人都没有工作。并且正在为所有人分割“-”排成一行

你知道我该怎么写这种情况下的分割吗

精确输入字符串:

start_check_state.log-
start_check_state.log-Initializing WebLogic Scripting Tool (WLST) ...
start_check_state.log-
start_check_state.log:Welcome to WebLogic Server Administration Scripting Shell 
start_check_state.log-
start_check_state.log-Type help() for help on available commands
start_check_state.log-
start_check_state.log-Connecting to t3://0.0.0.0:6300 with userid system ...
start_check_state.log-Successfully connected to Admin Server '' that belongs to domain 'dev'.
--
cia.log.2017-07-20-10.07.2017 6:00:05.963 [INFO ] <CIA> - <session.CIADispatcherBean> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Activate Maintenance Ticket> - [event :alarmKey=JOB PROCESS,srcSystem=CIA Planned Maintenance]
cia.log.2017-07-20-10.07.2017 6:00:05.965 [INFO ] <CIA> - <em.CIAEventQueue> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Activate Maintenance Ticket> - COMPLETED
cia.log.2017-07-20-10.07.2017 6:00:06.039 [INFO ] <CIA> - <messagelisteners.MessageListenerDelegate> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Close Maintenance Ticket> - message handling started. sequence = [-1115362510203642553] node = 
cia.log.2017-07-20-10.07.2017 6:00:06.040 [INFO ] <CIA> - <dispatcher.MDBProcessor> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Close Maintenance Ticket> - CIA Event <JOB PROCESS> processing on <>
cia.log.2017-07-20-10.07.2017 6:00:06.043 [INFO ] <CIA> - <dispatcher.MDBProcessor> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Close Maintenance Ticket> - CIA Event <JOB PROCESS> was successfully processed on <>
cia.log.2017-07-20:10.07.2017 6:00:06.044 [INFO ] <CIA> - <messagelisteners.MessageListenerDelegate> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Close Maintenance Ticket> - message processed. sequence = [-1115362510203642553] node =  
cia.log.2017-07-20-10.07.2017 6:00:06.058 [INFO ] <CIA> - <messagelisteners.MessageListenerDelegate> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Activate Maintenance Ticket> - message handling started. sequence = [-1115362510203642553] node = test123
cia.log.2017-07-20-10.07.2017 6:00:06.060 [INFO ] <CIA> - <dispatcher.MDBProcessor> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Activate Maintenance Ticket> - CIA Event <JOB PROCESS> processing on <>
cia.log.2017-07-20-10.07.2017 6:00:06.063 [INFO ] <CIA> - <dispatcher.MDBProcessor> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Activate Maintenance Ticket> - CIA Event <JOB PROCESS> was successfully processed on <>
cia.log.2017-07-20-10.07.2017 6:00:06.064 [INFO ] <CIA> - <messagelisteners.MessageListenerDelegate> - <Flow_Id Alarm_Id/NC_Id : JOB PROCESS> <EventType : Activate Maintenance Ticket> - message processed. sequence = [-1115362510203642553] node = 
--
cpm_.log-2017-07-10 05:27:53 INFO  com..solutions.tfnurg.toms.cpm.job.BorrowedEquipmentNotificationJob :29 - Job for creating notification tasks started.
cpm_.log-2017-07-10 05:27:53 INFO  com..solutions.tfnurg.toms.cpm.bean.impl.test123 :471 - All required remind tasks created without any errors
cpm_.log:2017-07-10 05:27:53 INFO  com..solutions.tfnurg.toms.cpm.job.BorrowedEquipmentNotificationJob :46 - Created Notification Tasks: 
cpm_.log-2017-07-10 05:27:53 INFO  com..solutions.tfnurg.toms.cpm.job.BorrowedEquipmentNotificationJob :34 - Job for creating notification tasks ended.
--
start\u check\u state.log-
启动\u检查\u state.log-初始化WebLogic脚本工具(WLST)。。。
启动\u检查\u state.log-
启动\u检查\u状态。日志:欢迎使用WebLogic服务器管理脚本Shell
启动\u检查\u state.log-
启动\u检查\u state.log-Type help()以获取有关可用命令的帮助
启动\u检查\u state.log-
启动\u check\u state.log-使用用户ID系统连接到t3://0.0.0.0:6300。。。
start_check_state.log-已成功连接到属于域“dev”的管理服务器“”。
--
cia.log.2017-07-20-10.07.2017 6:00:05.963[信息]-[事件:alarmKey=作业流程,srcSystem=cia计划维护]
cia.log.2017-07-20-10.07.2017 6:00:05.965[信息]--已完成
cia.log.2017-07-20-10.07.2017 6:00:06.039[信息]--消息处理已开始。序列=[-1115362510203642553]节点=
cia.log.2017-07-20-10.07.2017 6:00:06.040[信息]--cia事件处理
cia.log.2017-07-20-10.07.2017 6:00:06.043[信息]--cia事件已在上成功处理
中情局日志2017-07-20:10.07.2017 6:00:06.044[信息]--消息已处理。序列=[-1115362510203642553]节点=
cia.log.2017-07-20-10.07.2017 6:00:06.058[信息]--消息处理已开始。序列=[-1115362510203642553]节点=test123
cia.log.2017-07-20-10.07.2017 6:00:06.060[信息]--cia事件处理
cia.log.2017-07-20-10.07.2017 6:00:06.063[信息]--cia事件已在上成功处理
cia.log.2017-07-20-10.07.2017 6:00:06.064[信息]--已处理消息。序列=[-1115362510203642553]节点=
--
cpm.log-2017-07-10 05:27:53信息com..solutions.tfnurg.toms.cpm.job.BorroredequipmentNotificationJob:29-创建通知任务的作业已开始。
cpm_.log-2017-07-10 05:27:53信息com..solutions.tfnurg.toms.cpm.bean.impl.test123:471-创建的所有必需提醒任务均无任何错误
cpm_.log:2017-07-10 05:27:53信息com..solutions.tfnurg.toms.cpm.job.借用设备通知作业:46-创建的通知任务:
cpm_.log-2017-07-10 05:27:53信息com..solutions.tfnurg.toms.cpm.job.借用设备通知作业:34-创建通知任务的作业已结束。
--

您应该同时搜索
\n
(换行符)和/或
\r
(回车符)

试试这个正则表达式:

[\n\r]+--[\n\r]+
演示:

在Java中:

searchValue.split("[\\n\\r]+--[\\n\\r]+")

您应该同时搜索
\n
(换行符)和/或
\r
(回车符)

试试这个正则表达式:

[\n\r]+--[\n\r]+
演示:

在Java中:

searchValue.split("[\\n\\r]+--[\\n\\r]+")

这对我来说很好,可能有奇怪的空白,正如其他答案和评论所建议的那样

下面是一个演示,展示了您希望的输入和输出:

输入:

import java.util.Arrays;

/**
 * https://stackoverflow.com/questions/45276416/java-split-not-working-as-expected-for-string
 */
class JavaSplitTest
{
  public static void main(String[] args)
  {
    String searchValue = "Hi Hello this is -- to test\n" +
      "\n" +
      "--\n" +
      "\n" +
      "java split function -- test\n";

    String[] splitted = searchValue.split("\n--\n");

    System.out.println(Arrays.asList(splitted));
  }
}
输出:

[Hi Hello this is -- to test
, 
java split function -- test
]

这对我来说很好,可能有奇怪的空白,正如其他答案和评论所建议的那样

下面是一个演示,展示了您希望的输入和输出:

输入:

import java.util.Arrays;

/**
 * https://stackoverflow.com/questions/45276416/java-split-not-working-as-expected-for-string
 */
class JavaSplitTest
{
  public static void main(String[] args)
  {
    String searchValue = "Hi Hello this is -- to test\n" +
      "\n" +
      "--\n" +
      "\n" +
      "java split function -- test\n";

    String[] splitted = searchValue.split("\n--\n");

    System.out.println(Arrays.asList(splitted));
  }
}
输出:

[Hi Hello this is -- to test
, 
java split function -- test
]

定义“未工作”,显示准确的代码、当前和预期的输出。其中一项可能是换行符组合的类型,\r\n适用于Windows,而不是Windows。无法重现此问题
.split(“-”)
工作正常可能,行尾和破折号与您的想法不同。尝试
split(\\R\\s*\\p{Pd}{2}\\s*\\R+”)
。您可以提供一个精确的Java字符串文本形式的输入吗?这样您就没有了
-
或换行符。最可能的原因是它是HTML,您看到的换行符是

/

。或者
-
s是在应用正则表达式之前必须解码为
-
的某种实体。定义“未工作”,显示准确的代码、当前和预期的输出。一件事可能是换行符组合的类型,对于Windows是\r\n,而不是\n。无法重现该问题
.split(“-”)
工作正常可能,行尾和破折号与您的想法不同。尝试
split(\\R\\s*\\p{Pd}{2}\\s*\\R+”)
。您可以提供一个精确的Java字符串文本形式的输入吗?这样您就没有了
-
或换行符。最可能的原因是它是HTML,您看到的换行符是

/

。或者
-
是某种实体,在应用正则表达式之前,必须将其解码为
-
。@user2727493我已将您提供的输入字符串复制并粘贴到我的程序中。在我的编译器中运行良好。您可以指定如何获取此字符串吗?从任何服务或文件、DB等中的某个地方写入???@user2727493我已将您提供的输入字符串复制并粘贴到我的程序中。在我的编译器中运行良好。您可以指定如何获取此字符串吗?从任何服务或文件、数据库等中的某处写入??