Câu hỏi Làm thế nào để tách một chuỗi phân cách bằng dấu phẩy thành một mảng trong cfscript


Có cách nào dễ dàng để tách một chuỗi phân cách bằng dấu phẩy thành một mảng bằng cách sử dụng cfscript?

Tương tự như JavaScript sau:

var a = "a,b,c".split(",");

8
2017-09-06 17:00


gốc


Đáng chú ý là .split () hoạt động trong CF. Tôi nghĩ rằng tất cả các phương thức chuỗi Java nguyên gốc sẽ hoạt động ra khỏi hộp. <cfset a = "a,b,c" /> <cfdump var="#a.split( ',' )#" /> - charliegriefer
Um ... cũng có thể đáng chú ý là mảng kết quả không phải là một mảng ColdFusion, mà là một mảng Java nguyên gốc. Bạn sẽ không thể sửa đổi thông qua CF. Danh sách của Henry listToArray () chắc chắn là câu trả lời "đúng nhất", nhưng tìm ra nó sẽ không làm tổn thương khi biết về các phương thức chuỗi Java gốc làm việc trên các chuỗi CF (với lời nhắc nói trên) :) - charliegriefer


Các câu trả lời:


var a = ListToArray("a,b,c,d,e,f");     

https://cfdocs.org/listtoarray


28
2017-09-06 17:08



Tôi không hiểu điều này. Tôi muốn chia nhỏ bằng "," nhưng bạn chưa xác định được ở bất cứ đâu. Làm cách nào để phương thức biết sử dụng dấu "," làm dấu phân tách? Ngoài ra các tài liệu nói rằng nó có một danh sách không phải là một chuỗi. Và đây là nghĩa vụ phải được trong một thẻ cfscript tôi giả sử? - lorless
@ dlampard, vì danh sách trong CF được phân cách bằng dấu phẩy theo mặc định. - Henry


Hai tùy chọn chính của bạn là listToArray (myList) và phương thức java myList.split (), như đã lưu ý trong các câu trả lời và nhận xét trước đó. Có một số điều cần lưu ý mặc dù.

  • Theo mặc định, chức năng danh sách ColdFusion bỏ qua các mục danh sách trống.
  • Theo ColdFusion phiên bản 8, listToArray có một đối số thứ ba tùy chọn, includeEmptyFields, là một boolean kiểm soát hành vi đó, mặc định là false.

Ví dụ:

listToArray("asdf,,,qwer,tyui") is ["asdf", "qwer", "tyui"]
listToArray("asdf,,,qwer,tyui", ",", true) is ["asdf", "", "", "qwer", "tyui"]

Re java split:

Cũng giống như các chức năng java khác mà chồng lên thông qua lớp ColdFusion, đây là tài liệu không được tài liệu và không được hỗ trợ

Trong Adobe ColdFusion 8, 9 và 10, nhưng không có trong Railo, đây là lỗi cú pháp:

a = "asdf,,,qwer,tyui".split(",")

Nhưng điều này hoạt động:

s = "asdf,,,qwer,tyui";
a = s.split(",");

Theo như tôi thấy, Adobe ColdFusion xử lý kết quả của .split () như một mảng ColdFusion:

  • CFDumps hiển thị nó dưới dạng mảng
  • Nó dựa trên 1
  • Bạn có thể sử dụng arrayLen trên đó
  • Bạn có thể sửa đổi các phần tử của nó trong ColdFusion
  • Có thể có những hành vi khác mà tôi đã không kiểm tra mà không giống như một mảng CF, nhưng như trên, nó không được hỗ trợ

Trong Railo:

  • Các bãi gỡ lỗi hiển thị nó như là Native Array (java.lang.String [])
  • Các phát biểu khác về hành vi giống như mảng của nó vẫn đúng

Điều này trái ngược với các mảng java thực, được tạo với createObject ("java", "java.util.ArrayList").
LƯU Ý: Điều đó chỉ đúng một phần; xem chỉnh sửa bên dưới.

  • Ví dụ, trong Adobe ColdFusion, các phần tử của một ArrayList java không thể được sửa đổi trực tiếp với CFML
  • Nói chung, Railo xử lý các mảng java giống như ColdFusion hơn ACF

Chỉnh sửa: Cảm ơn Leigh, tôi đứng sửa chữa, tôi nên dính vào những gì tôi biết, đó là cách CF hơn java.

Tôi đã phản ứng với bình luận nói rằng kết quả của .split () "không phải là một mảng ColdFusion, mà là một mảng Java bản địa. Bạn sẽ không thể sửa đổi nó thông qua CF", mà không phải là trường hợp trong kinh nghiệm của tôi. Nỗ lực của tôi để làm rõ rằng bằng cách cụ thể hơn là không được thông tin và không cần thiết.


3
2018-04-06 14:45



các mảng java, được tạo với createObject ("java", "java.util.ArrayList")  An ArrayList không giống như một mảng java. ArrayList's là một loại java.util.List và có thể được sửa đổi, giống như bất kỳ mảng CF nào. (Bên dưới mui xe, ACF "mảng" là java.util.List quá). Mảng java "thực" là khác nhau. Một mảng java kích thước là bất biến. Có nghĩa là bạn có thể sửa đổi các phần tử của nó, nhưng bạn không thể thực hiện các thao tác thay đổi kích thước của nó tức là thêm hoặc xóa. - Leigh